我们来玩一个猜数字游戏:我随意写下一个[0, 1000000000]之间的数字但不告诉你,现在你来猜我写的是什么数字。你每次猜测一个答案后,我会告诉你小了、大了或对了,你在多少次之内一定能猜对?
现在我们给定的数据范围不是[0, 1000000000],而是更通用一般化的[min, max]。请写一段程序,给定任何min、max,以及min和max之间的number,该程序运行后都可以快速告诉我们猜测的次数。(可以使用你熟悉的任何编程语言,或者伪代码)
count = 0 def erfen(min,max,num): global count if min > max&nbs***bsp;num < min &nbs***bsp;num > max: return count if (min + max) // 2 == num: #print('对了', num) return count elif (min + max) // 2 > num: count += 1 #print('错了,大了') return erfen(min, (min + max+1) // 2, num) elif (min + max) // 2 < num: count += 1 #print('错了,小了') return erfen((min + max+1) // 2, max, num) print(erfen(0,1000000000,0))
public class test1 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int min,max,number; System.out.println("请输入最小值:"); min=scan.nextInt(); System.out.println("请输入最大值:"); max=scan.nextInt(); System.out.println("请输入查找的数字:"); number=scan.nextInt(); System.out.println("查找次数为:"+ findtimes(min,max,number)); } public static int findtimes(int min,int max,int number) { if(min>max || number<min || number> max) return 0; int res=1; if(number==(max-min)/2+min) return res; else if(number>(max-min)/2+min) res=res+findtimes((max-min)/2+min+1,max,number); else res=res+findtimes(min,(max-min)/2+min-1,number); return res; } }