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; }