复制到C++即可游玩



#include <bits/stdc++.h>
#include<windows.h>
#include <unistd.h>

using namespace std;

#define endl '\n'

#define TRACE 1
#define tcout TRACE && cout

#define fst ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

#define int long long
#define interesting long long

#define read(a) fst;cin >> (a)
#define out(a) fst;cout << (a) << endl;

#define huan fst;cout << endl;

#define all(a) (a).begin(),(a).end()

#define z_for_string(name, end) for(int name = 0; name < (end); i ++)
#define d_for_string(name, end) for(int name = (end); name > 0; i --)
#define z_rep(name, start, end) for(int name = (start); name <= (end); i ++)
#define d_rep(name, start, end) for(int name = (start); name >= (end); i --)

#define h_TRUE cout << "YES" << endl;
#define h_FALSE cout << "NO" << endl;
#define h_True cout << "Yes" << endl;
#define h_False cout << "No" << endl;
#define h_true cout << "yes" << endl;
#define h_false cout << "no" << endl;

#define k_TRUE cout << "YES" << " ";
#define k_FALSE cout << "NO" << " ";
#define k_True cout << "Yes" << " ";
#define k_False cout << "No" << " ";
#define k_true cout << "yes" << " ";
#define k_false cout << "no" << " ";

#define dext(a) return (a)

const int P = 998244353;
const int Base = 3221225477;
const int INF = 0x3f3f3f3f3f3f3f3f;
const int N = 1e6 + 10, M = 2e6 + 10;
const int Mod = 1e9+7;

void printf_red(const char *s)
{
    printf("\033[0m\033[1;31m%s\033[0m", s);
}

void printf_green(const char *s)
{
    printf("\033[0m\033[1;32m%s\033[0m", s);
}

void printf_yellow(const char *s)
{
    printf("\033[0m\033[1;33m%s\033[0m", s);
}
int randint(int l, int r)
{
    return rand() % (r - l + 1) + l;
}
void printf_pink(const char *s)
{
    printf("\033[0m\033[1;35m%s\033[0m", s);
}

signed main()
{
	system("cls");
	printf_red("====数字炸弹====\n");
	printf_yellow("* zzy制作\n");
	sleep(2);
	system("cls");
	printf_yellow("游戏正在加载...\n\n");
	sleep(randint(1,3));
	printf_green("加载完成,即将进入游戏\n"); 
	sleep(1);
	system("cls");
	srand(time(0));
	while (1)
	{
		printf_pink("数字炸弹开始!\n"); 
		int x, y;
		cout << "范围:"<<endl << "x: ";
		cin >> x;
		cout<< "y: ";
		cin >> y;
		unsigned long long num = rand() % (y - x + 1) + x;
		unsigned long long a = 0, maxx = max(x, y), minn = min(x, y);
		bool flag = false;
		while (1)
		{
			cout << "炸弹在" << minn << "到" << maxx << "之间(边界可选)。" << endl;
			cout << "请选择数字:" << endl;
			cin >> a;
			if (a >= minn && a <= maxx)
			{
				if (a > num)
				{
					maxx = a - 1;
					printf_yellow("请继续...\n");

				}
				else if (a < num)
				{
					minn = a + 1;
					printf_yellow("请继续...\n");
				}
				else
				{
					break;
				}
			}
			else
			{
				printf_red("输入错误\n");
			}
			if (maxx == minn)
			{
				flag = true;
				break;
			}
		}
		if(flag == true)
		{
			cout << "你赢了" << endl;
		}
		else
		{
			cout << "你输了!" << endl;
		}
		cout << "炸弹是" << num << endl;
		cout << "按任意键重新开始游戏" << endl;
		system("pause");
		system("cls");
	}
	return 0;
}


讲解

数字炸弹算是一个简单二分

大概是这样的

给定你一个有序列表(从小到大排序,xyx \sim y)

首先你取 xyx \sim y 之间的一个数作为数字炸弹,

然后你找一个人猜,如果他猜的数比数字炸弹大,那将 yy 设为他猜的数

如果他猜的数比数字炸弹小,那将 xx 设为他猜的数

还可以吧,

system("cls"); 是清屏的意思