如何在while循环中存储int值?猜数字游戏唯一尝试次数统计问题
解决猜数字游戏的唯一尝试次数统计问题
要实现重复猜测同一数字不重复计数的需求,核心是记录用户已经猜过的数字,每次输入后先判断是否为首次猜测,再更新计数。以下是修改后的完整代码及关键说明:
修改后的代码
#include <iostream> #include <unordered_set> // 引入集合容器存储已猜数字 using namespace std; int main() { int numberToGuess = 42; // 示例目标数字,可自行修改 int g = 0; int unique_tries = 0; unordered_set<int> guessedNumbers; // 存储所有已猜过的唯一数字 while (g != numberToGuess) { printf("Guess a number between 0 and 99: "); cin >> g; // 先检查输入合法性 if (g < 0 || g > 99) { printf("Number has to be between 0 and 99.\n"); continue; // 非法输入不计数,直接进入下一轮循环 } // 判断当前数字是否为首次猜测 if (guessedNumbers.find(g) == guessedNumbers.end()) { unique_tries++; guessedNumbers.insert(g); // 将首次猜测的数字加入集合 } // 反馈猜测结果 if (g < numberToGuess) { printf("The number is higher.\n"); } else if (g > numberToGuess) { printf("The number is lower.\n"); } else { // 正确处理单复数输出 printf("You guessed the correct number. You tried %d %s.\n", unique_tries, unique_tries == 1 ? "time" : "times"); break; } } return 0; }
关键修改说明
- 用
unordered_set存储已猜数字:集合自带去重特性,且平均O(1)的查找效率,能快速判断数字是否已被猜测过。 - 调整输入检查顺序:先过滤0-99以外的非法输入,这类输入不参与计数逻辑。
- 唯一计数逻辑:只有当数字不在集合中时,才增加
unique_tries并将数字加入集合,确保重复猜测不重复计数。 - 修正格式错误:原代码中
printf的格式字符串与参数不匹配,修改后正确处理"time"/"times"的单复数输出。
内容的提问来源于stack exchange,提问作者djahern26
相关产品推荐
相关产品推荐

