题目
原题:
小游戏: 猜数字
输入n(0<n<100), 想让程序猜到的值
如果程序没有猜中, 则提示太大/太小 并让程序接着猜测
程序通过二分法不断缩小猜测范围, 直到猜中n
例如n = 39
程序第一次猜测50, 判断数值太大
第二次猜测25, 判断数值太小
第三次猜测37 判断数值太小
43 大
40 大
38 小
39 正确
输入: n 表示被猜测值
输出: 每行输出一个整数, 表示程序当前猜测的数字
最终行输出猜测的次数
样例输入:
39
样例输出:
50
25
37
43
40
38
39
最终猜测了7次
代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
void In(double* a);
int main(){
int a; //随机出来的数字
double _b; //所猜测的数字
int b; //所猜测的数字,整数形式
int choice; //检验是否退出
system("title 【婳骨】の猜数器");
while (1) {
int fre = 0; //输入次数
srand((unsigned)time(NULL));
a = rand() % 99 + 1; //随机数的范围
printf("欢迎来到【婳骨】の猜数器\n");
printf("请输入1~99的整数,输入后按下回车以确认!\n");
do {
printf("来吧!猜数!\n");
while (1) {
In(&_b);
b = (int)_b;
if (b < 1 || b > 99) {
printf("不在范围内哦");
}
else break;
}
if (b > a) {
printf("输大了!不要停下来啊!\n");
fre++;
}
else if (b < a) {
printf("输小了!你不行啊!\n");
fre++;
}
} while (b != a);
printf("输对啦!");
if (fre == 1) {
printf("你确定你没作弊?\n");
}
if (fre >= 10) {
printf("你这技术,啧啧\n");
}
if (fre >= 20) {
printf("嗯,你输了\n");
}
printf("你总共试了%d次,取得了本场比赛的胜利!\n(难道还会输么??)\n", fre);
printf("如要继续请输入0,否则输入任意键退出\n");
choice = getch();
if (choice == '0') {
system("cls");
}
else {
printf("谢谢使用!\n");
break;
}
}
system("pause");
return 0;
}
void In(double* a) { //对输入数据进行判断
do {
if (scanf_s("%lf", a) == 1) {
break;
}
char choice;
while ((choice = getchar()) != '\n' && choice != EOF);
printf("输入的不是数字!\n");
} while (scanf_s("%lf", a) != 1);
}
部分运行结果