您的位置:首页 > 其它

挺有意思的一道数学推理题

2013-12-11 16:11 232 查看


猜数字

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2670    Accepted Submission(s): 1916


Problem Description

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

思路:
题目问:猜n次可以猜到的最大数x(共有x个数),我们可以反其道而行,猜x最多(最少)需要多少次?最多,显然是猜x?不对?x-1?不对?…………2?不对,1对!时间显然是O(x)阶的。这种办法显然太笨了,现在,我们需要猜x?不对?x/2?不对?x/4?不对...............1?对!显然需要猜的次数是O(lgx)阶的。现在才回过头看题目,如果知道猜的
次数是n次,那么可以知道x最大取值为2^n,因此题目可解。
#include<iostream>
using namespace std;

int main()
{
__int64 n,T;
cin >> T;
while(T--)
{
cin >> n;
cout << ((1<<n)-1) << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: