作为一个程序员,我觉得,这事情不管真假,都在提醒我们一件极易被我们忽略的事情,那就是,职场别太“透明”,信息差才是护身符。
算法题:猜数字游戏
问题解析
二分查找核心思想
定义一个上下界 low
和high
。每次取中间值 mid
,比较这个值和目标值的关系。
如果 mid
小于目标值,说明数字在右边,更新low
。如果 mid
大于目标值,说明数字在左边,更新high
。
Java代码实现
import java.util.Random;
public class GuessNumberGame {
public static void main(String[] args) {
int target = new Random().nextInt(100) + 1; // 随机生成1到100的数字
System.out.println("游戏开始!我选了一个1到100的数字,快来猜吧!");
int result = guessNumber(1, 100, target);
System.out.println("恭喜!你猜中了,数字是:" + result);
}
public static int guessNumber(int low, int high, int target) {
int attempts = 0; // 记录猜测次数
while (low <= high) {
int mid = low + (high - low) / 2; // 避免直接相加可能的溢出问题
attempts++;
System.out.println("你猜的数字是:" + mid);
if (mid == target) {
System.out.println("终于猜中了,用了" + attempts + "次!");
return mid;
} else if (mid < target) {
System.out.println("猜低了!");
low = mid + 1;
} else {
System.out.println("猜高了!");
high = mid - 1;
}
}
return -1; // 理论上不会执行到这一步
}
}
代码亮点
二分查找的经典实现:用了 mid = low + (high - low) / 2
,避免low + high
直接相加可能导致的整数溢出问题。循环判断逻辑清晰:通过 if-else
语句明确下一步调整方向。尝试次数统计:加了个 attempts
,每次猜测递增,既能记录进度,也能满足老板的 KPI。
运行效果
2^7 = 128
,刚好覆盖了 1 到 100)。-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。