猜数字(HDU-2178)
Problem Description
? ? A有一個(gè)數(shù)m,B來猜。B每猜一次,A就說太大、太小或?qū)α恕?/p>
????問B猜n次可以猜到的最大數(shù)。
Input
? ? 第1行是整數(shù)T,表示有T組數(shù)據(jù),下面有T行
????每行一個(gè)整數(shù)n (1 ≤ n ≤ 30)?
Output
? ? ?猜n次可以猜到的最大數(shù)
Sample Input
????2
????1
????3
Sample Output
????1
????7
思路:
題意:有1~m的數(shù),最多猜n次,一定能猜到(1,m)內(nèi)的任意數(shù)
? ? 設(shè):能找到最大的數(shù)為M
? ? 則:左邊界:1,右邊界:M,每次查找左端不變右端加一,查找n次得到足夠大的數(shù)
? ? 故:
? ?? 第一次查找:(M+1)/2=M,得:M=1
? ? ? ? 第二次查找:( (M+1)/2+M+1 )/2=M,得:M=3
? ? ? ? 第三次查找:( (M+1)/2+M+1 )/2+M+1 )/2=M,得:M=7
? ? ? ? 第四次查找:( ( (M+1)/2+M+1 )/2+M+1 ) +M+1)/2=M,得:M=15
? ? ? ? 第五次查找:( ( ( (M+1)/2+M+1 )/2+M+1 ) +M+1)/2 )/2=M,得:M=31
數(shù)學(xué)歸納法,得:M=2^n-1
? ? 因此:利用公式直接計(jì)算得結(jié)果
Source Program
#include<cstdio> #include<cmath> int main() {int t;int n;int total;scanf("%d",&t);//輸入測(cè)試數(shù)據(jù)個(gè)數(shù)while(t--){scanf("%d",&n);//輸入猜的次數(shù)total=pow(2,n)-1;printf("%d\n",total);//輸出可猜出的最大值}return 0; }總結(jié)
以上是生活随笔為你收集整理的猜数字(HDU-2178)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计数问题(洛谷-P1980)
- 下一篇: 信息学奥赛C++语言:趣味整数4(水仙花