作业帮 > 综合 > 作业

hdu A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" .问B猜n次可以猜到的最大数.Input第1

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/26 01:03:43
hdu
A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" .
问B猜n次可以猜到的最大数.
Input
第1行是整数T,表示有T组数据,下面有T行
每行一个整数n (1 ≤ n ≤ 30)
Output
猜n次可以猜到的最大数
Sample Input
2
1
3
Sample Output
1
7
他要我们输出的是什么?
是这样的,条件:A有一数字m,B猜n次.题目应该默认m为正整数.
题目要求,输入的是n,也就是说输入的是B猜的次数.而输出的是B猜n次保证能猜到m的情况下,m可能的最大值.
比如第一个例子,B猜1次保证猜中,那么因为m是正整数,则m最大只能为1.假如m可以是2,那B猜一次就不能保证猜中m,所以m不能取2.第二个例子类似.
#include
#include
using namespace std;
int main()
{
int n,t;
while(scanf("%d",&t)!=EOF)
{
while(t--&&scanf("%d",&n))
{
printf("%d\n",(int)pow(2,n)-1);
}
}
return 0;
} 再问: 那怎么知道B是怎么猜的
再答: 这道题就是考你能不能知道B是怎么猜的。比如说题目中给的例子 B用三次就一定猜中A的数,A的数最大是多少? 假如B是从1开始猜,再猜2,猜3……如果3次一定猜中A,A的最大数就是3. 假如B是从2开始猜,再猜4、6……那么猜3次一定猜中的最大数是5. B的猜测策略是任意的,你想让他怎么猜他就怎么猜,但是在所有策略中,有一种最优策略,能让他用同样的猜测次数,但是猜测的范围更大。就是考你你知不知道这种策略了。 B用最优策略猜的话,3次猜中的m最大数是7。 如果还有不懂的地方,希望与你讨论。
再问: 那为什么会是猜log2(m)+1次,最优就是按2^n-1猜?
再答: A:我的m可能取到的最大值是15,你猜猜m是多少? B:8? A:大了。 B:4? A:大了。 B:2? A:大了。 B:1! 这是最优策略,B猜4次可以猜对的最大数是15.不信你试试别的策略,猜4次保证猜到的最大值肯定不会超过15.