Problem Description
A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" 。
问B猜n次可以猜到的最大数。
问B猜n次可以猜到的最大数。
Input
第1行是整数T,表示有T组数据,下面有T行
每行一个整数n (1 ≤ n ≤ 30)
每行一个整数n (1 ≤ n ≤ 30)
Output
猜n次可以猜到的最大数
Sample Input
2
1
3
Sample Output
1
7
题意:都能看懂就不说了;
解题思路:
就是二分的思想,设闭区间为[1,m],m即为所求,利用二分的思想每次去一半向右靠(有边界不变),可以推出公式:
(((((1+m)/2)+1+m)/2)+1+m)/2=m ;
感悟:感觉别人做的好快啊 ,拉下的越来越多了;
代码:
#include
#include
#include
using namespace std;
int main()
{
int
t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1)//一次就中只能是1;
printf("1
");
else if(n==2)//两次就中只能是2;
printf("2
");
else
printf("%.0f
",pow(2,n)-1);
}
}
#include
#include
using namespace std;
int main()
{
}