首页 > 试题广场 >

我们来玩一个猜数字游戏:我随意写下一个[0, 1000000

[问答题]
我们来玩一个猜数字游戏:我随意写下一个[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))


发表于 2020-11-14 19:43:44 回复(0)
要么是我理解错了,要么是答案错了,我觉得要区分中间数的多少
发表于 2020-03-02 03:32:39 回复(0)
Java版,没仔细检查,如果有错求指教。
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;
    }
}


编辑于 2020-02-16 22:56:47 回复(0)

热门推荐