閱讀174 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Java7裏try-with-resources分析
  下一篇:go 程序猿的新博客開通啦!