You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:55:28