前几天我在研究二分法在1-100整数范围内随机生成一个数,用二分法去找到这个数需要猜几次写了一个程序,代码如下(新手写的不好)
package me.test.day04.demo03.CSDN;
import java.util.Random;
public class class31 {
public static void main(String[] args) {
Random r = new Random();
Random r1 = new Random();
int randomNum = r.nextInt(100) + 1;
int randomNum2 = r1.nextInt(100) + 1;
int i = 1;
int low = 1;//这里我有时候写1有时候写0
int high = 100;
while (true) {
System.out.println("你猜是几?" + "第" + i + "次");
int guessNum = randomNum2;
System.out.println(guessNum);
if (guessNum > randomNum) {
System.out.println("大了,继续");
high = guessNum;
randomNum2 = (low + high) / 2;
} else if (guessNum < randomNum) {
System.out.println("小了,继续");
low = guessNum;
randomNum2 = (low + high) / 2;
} else {
System.out.println("您猜中了!");
break;
}
i++;
}
System.out.println("游戏结束");
}
}
我突然想到一个问题[1,3]或者(0,3]区间上的整数的猜测,二分法显然有点傻
根据我们人类直观算法最多猜一次(第一次猜2就行了)就可以得到要猜的数字,但是用二分法最多要猜两次。代码如下
mport java.util.Random;
public class class31 {
public static void main(String[] args) {
Random r = new Random();
Random r1 = new Random();
int randomNum = r.nextInt(3) + 1;
int randomNum2 = r1.nextInt(3) + 1;
int i = 1;
int low = 1;//这里我有时候写1有时候写0
int high = 3;
while (true) {
System.out.println("你猜是几?" + "第" + i + "次");
int guessNum = randomNum2;
System.out.println(guessNum);
if (guessNum > randomNum) {
System.out.println("大了,继续");
high = guessNum;
randomNum2 = (low + high) / 2;
} else if (guessNum < randomNum) {
System.out.println("小了,继续");
low = guessNum;
randomNum2 = (low + high) / 2;
} else {
System.out.println("您猜中了!");
break;
}
i++;
}
System.out.println("游戏结束");
}
}
不知道为啥多跑几遍就会出现bug会出现循环2,然后我发现当要猜的数字是3且第一次猜的数字是1这个算法就失效
————————未完待续(我这里还有个想法下次写)