374. Guess Number Higher or Lower(猜数字大小)

题目描述

猜数字游戏的规则如下:

·每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
·如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):

·-1:我选出的数字比你猜的数字小 pick < num
·1:我选出的数字比你猜的数字大 pick > num
·0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。

问题分析

此问题可以采用二分法进行解决。

代码

int guessNumber(int n){
	unsigned int left = 0;
    unsigned int right = n;
    unsigned int middle = (left + right) / 2;
    while(left<=right){
        switch(guess(middle)){
            case 0:
                return middle;
                break;
            case -1:
                right = middle - 1;
                break;
            case 1:
                left = middle + 1;
                break;
        }
        middle = (left + right) / 2;
    }
    return 0;
}

提交结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值