为httpswwwluogucomcnproblemP7881中的题目写一篇题解并给出完整代码
题目:猜数游戏
题目描述: 小明正在和小红玩一个猜数游戏。小明先想好一个数,然后小红每次猜一个数,并告诉小明猜的数是大了还是小了。小明会根据小红的提示调整答案,直到小红猜到正确的数为止。现在请你帮助小红写一个程序,根据小明的提示猜出正确的数。
输入格式: 共一行,包含两个整数n和m,分别表示小明所想的数和小红猜的次数。
输出格式: 共m行,每行一个整数,表示小红猜的数。
输入样例: 10 4
输出样例: 5 7 8 9
解题思路: 根据题目描述,我们可以使用二分查找的思想来猜数。首先确定猜数范围的上下界,即最小值和最大值。然后通过二分查找的方式猜数,每次根据小明的提示调整猜数的范围。
具体实现:
- 读入小明所想的数n和猜的次数m。
- 初始化最小值为1,最大值为n。
- 使用二分查找的方式猜数,循环m次:
- 计算猜数的中间值mid = (min + max) / 2。
- 输出猜的数mid。
- 根据小明的提示调整猜数的范围:
- 如果mid大于n,则令max = mid - 1。
- 如果mid小于n,则令min = mid + 1。
- 输出完整的代码。
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int min = 1, max = n;
for (int i = 0; i < m; i++) {
int mid = (min + max) / 2;
cout << mid << endl;
char hint;
cin >> hint;
if (hint == 'G') {
max = mid - 1;
} else if (hint == 'L') {
min = mid + 1;
} else {
break;
}
}
return 0;
}
这段代码使用二分查找的思想猜数,通过不断调整猜数的范围来获取答案。在每次猜数后,根据小明的提示更新猜数的范围。当小红猜到正确的数或者达到猜数次数上限时停止猜数
原文地址: https://www.cveoy.top/t/topic/ipw4 著作权归作者所有。请勿转载和采集!