题目描述
猜数字游戏的规则如下:
每轮游戏,都会从 1 到 n 随机选择一个数字,需要我们来猜是那个数字,如果我们猜的数字大于给出的数字那么返回 -1;如果我们猜的数字等于给出的数字那么返回 0;否则返回 1
也就是说,每次游戏可能会含有几轮!!!而且每轮给出的数字都是变化的
C 语言具体代码实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int guess(int n){
// 设置随机数种子
srand((unsigned)time(NULL));
int index = rand()%10+1; // 1~10的随机数
if(index == n){
return 0;
}else if(index > n){
return 1;
}else{
return -1;
}
}
int k = 0;
int guessNumber(int n){
int left = 1, right = n;
while(left < right){ // 循环直到区间左右端点相同
int mid = (right-left)/2 + left;
k++;
if(guess(mid) <= 0){ // 此时在区间 [1, mid]
right = mid;
}else{ // 此时在区间 [mid+1, n]
left = mid+1;
}
}
return right; // 或 return left;
}
int main(void){
int index = guessNumber(10);
printf("本次游戏的数字为:%d,共猜了%d轮", index, k); // 本次游戏的数字为:1,共猜了4轮
return 0;
}