首页 > 试题广场 >

猜数

[编程题]猜数
  • 热度指数:3996 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛和妞妞正在玩一个猜数游戏,妞妞心里想两个不相等的正数,把这两个正数的和y告诉牛牛。
妞妞声称这两个数都不超过x,让牛牛猜这两个数是多少。
牛牛每猜一次,妞妞会告诉他猜对了还是猜错了,猜对了就停止游戏,猜错了就直到牛牛猜对为止。
妞妞为了加大难度,有时会误报x的大小,如果牛牛可以判断出了这个x是错误的,就会直接询问妞妞答案。
牛牛最坏情况下要猜多少次才能猜到妞妞想的数呢?

输入描述:
两个整数x,y。1<=x,y<=1014


输出描述:
一个数n,表示牛牛在最坏情况下猜测的次数。
示例1

输入

7 10

输出

2
示例2

输入

4 10

输出

0
想了半天没明白为啥 7 10 答案是2 而不是5。
最后终于看见了题干要求不相等的两个正数。。。
算一下上下边界就行了。
可能性就是
1 9
2 8
3 7 
4 6
5 5
……
可行域范围满足a,b<=7。直接数a,从1数到x。
那就是左边的数字a从1数但要满足b = y-a<=x.
则a的下界为max(1,y-x)。
最多数到x,此时得到上界,为x,但不能超过y,因此是min(x,y)
还要把存在相等情况去了,比如a=b的情况。
去完后还要除以2,我佛了。因为这里不要求顺序,1 9和9 1是一种情况,搞笑。
x,y = [int(x) for x in input().split()]
left = max(1,y-x)
right = min(x,y)
times = right - left + 1
if y%2==0:
    times-=1
times = (times)//2
if times<0:
    times = 0
print(times)


发表于 2019-11-30 21:20:27 回复(0)