题目

猜数字:程序随机数,用户多次猜测

思路

本题「猜数字」:程序随机生成秘密数,用户多次猜测直到猜中。 srand 初始化随机种子,rand()%N+1 生成范围;循环读入猜测,比较输出偏大/偏小/正确,猜中后结束。

解题分析

固定种子的 rand 便于对拍。线性猜可以二分:每次猜中间值,根据 high/low 折半区间,比随机猜次数更少(可写进其它写法)。

完整程序

import java.io.*;

public class Main {
    public static void main(String[] args) {
        Random rnd = new Random(42);
        int secret = rnd.nextInt(100) + 1, tries = 0;
        for (int guess : new int[] {50, 75, 88, 82}) {
            tries++;
            if (guess > secret) System.out.println("high");
            else if (guess < secret) System.out.println("low");
            else {
                System.out.println("ok " + tries);
                break;
            }
        }
    }
}

运行示例

输出:

low
low
high
ok 4

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

二分猜数

secret 固定为 82,样例输入输出与 Python 版一致。

程序:


public class Main {
    public static void main(String[] args) {
        int secret = 82;
        int lo = 1, hi = 100, tries = 0;
        for (int guess : new int[] {50, 75, 88, 82}) {
            tries++;
            if (guess > secret) {
                System.out.println("high");
                hi = guess - 1;
            } else if (guess < secret) {
                System.out.println("low");
                lo = guess + 1;
            } else {
                System.out.println("ok " + tries);
                break;
            }
            if (lo > hi) {
                break;
            }
        }
    }
}

运行示例

输出:

low
low
high
ok 4