C++ / java 编程思想 找数字

来源:百度知道 编辑:UC知道 时间:2024/05/05 04:43:28
用C++和java都行,主要是讲一下思路就行了, 问题是这样的:

随意输入2个数字, 第一个是范围,第二个是要找的数字.
比如232和89吧, 输入之后让程序在0~232这个范围内自己猜到89这个数字. 但是猜的次数不能超过log2(w) + 1 次, w就是范围(本例里是232).

我用c++写的是先跳到范围的中心,就是232 / 2 = 116那里, 如果多过89, 在往往回跳,跳116 / 2 = 58个单位,就是位置58(116-58 = 58), 然后58小于89,就再往前跳29(58 / 2)个单位,于是现在走到位置58+29 = 87.....依此类推.不过这方法太烂了,已经超过了限定的猜数次数.

大家有没有好点的方法,指点一以阿~

给你写了一个: 思路就是在范围/2控制:逐步将猜测范围缩小,直到猜中,其他我也没有什么好的思路了!
package com;

public class Guess {

public static void main(String[] args) {
Guess.guess(100, 89);
}

public static void guess(int range, int number) {
int minGuess = 1;
int maxGuess = range;
if (number > range)
throw new RuntimeException("我倒,数字不在范围内!");

int guessNumber = 1;
System.out.println(Math.log(range)/Math.log(2)+1);
int random = range/2;
System.out.println(random);
while (true) {
if (number == random) {// 猜对了
System.out.println("恭喜你,猜对了! 猜测次数:" + guessNumber);
break;
} else if (random < number) {// 猜小了
System.out.println("猜小了,控制范围!你猜的数:"+random);
minGuess = random;
} else {// 猜大了
System.out.println("猜大了,控制范围!你猜的数:"+random);
maxGuess = random;
}
random = minGuess+(maxGue