题目

编写一个“猜数字”互动小游戏:程序在 1~100 之间随机生成一个秘密整数,用户输入猜测的数字,程序提示“猜大了”或“猜小了”,直到猜中为止,输出总共猜测的次数。

输入格式:多次输入一个 1~100 之间的整数猜测,直到猜中。

输出格式:每次根据比较结果输出 猜大了、猜小了 或 猜中了,并输出猜测总轮数。

数据范围与约定:目标随机数在 1~100 之间。

思路与算法

1. 伪随机数种子初始化
使用当前时间作为种子:srand((unsigned)time(NULL));,避免每次运行生成完全相同的伪随机数序列。

2. 范围缩放与循环交互
通过 int secret = rand() % 100 + 1; 限制在 1~100 闭区间。用 while (1) 循环读取输入,根据大小关系给出分支反馈,猜中后 break 退出。

完整程序

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    // 设定随机数种子,保证测试可重现
    srand(42);
    // 生成 1~100 范围的随机目标值
    int secret = rand() % 100 + 1;

    int guess, tries = 0;
    // 二分猜数字交互循环
    while (scanf("%d", &guess) == 1) {
        tries++;
        if (guess > secret) {
            printf("high\n");
        } else if (guess < secret) {
            printf("low\n");
        } else {
            // 猜中目标,输出尝试总次数后跳出循环
            printf("ok %d\n", tries);
            break;
        }
    }
    return 0;
}

运行示例

输入:

50
75
88
82

输出:

low
low
high
ok 4