题目
猜数字:程序随机数,用户多次猜测
思路
本题「猜数字」:程序随机生成秘密数,用户多次猜测直到猜中。 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