HDU2178猜數字
HDU2178猜數字Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2716 Accepted Submission(s): 1955
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
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,m;
cin>>n;
while(n--)
{
cin>>m;
cout<<(int)pow(2,m)-1<<endl;
}
return 0;
}題意:最多猜n次一定可以猜到1至m(閉區間)內的任意數字,求m的最大值。公式不完全推導:
以n=3為例:
設閉區間為1到m,m即為所求.
由二分思想,盡量往右靠(每次取中間值加1為新的左邊界且右邊界不變),
可列出等式,
(((((1+m)/2)+1+m)/2)+1+m)/2=m
解得,m=7.
推廣,當n=n時,歸納易得,
m=(2^n)-1.
最後更新:2017-04-03 12:54:38