Problem ID:1008 猜數字
簡單題意:A有1數m,B來猜。B每猜一次,A就說“太大”、“太小”或“對了”。問B猜n次可以猜到的最大數。
解題思路形成過程:(題幹很短,問題很簡單,但是很難理解,想了好久也沒明白是什麼意思。翻了翻別人的博客才明白…)
首先,要注意題幹中的“可以猜到”四個字,它的意思是猜了n次後一定能夠猜到。所以一旦n確定了,可以猜到的最大數也就確定了。
n=1時,可以猜到的最大數只能是1。(如果給的數是2或其他數的話,就不一定“可以猜到”了)
n=2時,先猜2,如果A說“大了”,則再猜1;如果A說“小了”,則再猜3。所以能猜到的最大數就是3。
n=3時,先猜4,……能猜到的最大數就是7。
依次類推
然後很容易發現能夠猜到的最大數的規律:最大數=(2^n)-1。
弄清題意、發現規律後在代碼中直接套用公式即可。
感想:有些題目比較簡單,但題目很難理解,要結合給出的例子反覆思考題乾的意思,特別是要注意一些關鍵性的字眼(比如這道題中的“可以猜到”四個字)。
代碼:
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--){
int m;
scanf("%d",&m);
long long s=pow(2,m)-1;//注意m的取值範圍!
printf("%d\n",s);
}
return 0;
}