用C++代码实现以下问题【题目背景】 二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上数字的运算结果为24. 【题目描述】 定义每一个游戏由4个从1-9的数字和3个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。加法用+表示,减法用-表示,乘法用小写字母x表示,除法用/表示。在游戏里除法为整除。 老师给了你n个游戏的解,请你编写程序验证每个游戏的结果是否为24. 【输入格式】 从标准输入读入数据。 第一行输入一个整数n,从第二行开始到第n+1行中,每一行包含一个长度为7的字符串,为上述的24点游戏,保证数据格式合法。 【输出格式】 输出到标准输出。 包含n行,对于每一个游戏,如果其结果为24则输出字符串Yes, 否则输出字符串No
时间: 2024-02-15 14:06:01 浏览: 85
基于C++的24点游戏实现
好的,以下是C++代码实现:
```c++
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
string s;
cin >> s;
int a = s[0] - '0', b = s[2] - '0', c = s[4] - '0', d = s[6] - '0';
bool flag = false;
// 枚举所有可能的运算符顺序
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
for (int k = 0; k < 4; k++)
{
if (i == j || i == k || j == k) continue; // 避免运算符重复
int res;
// 枚举所有可能的运算符组合
switch (i)
{
case 0: res = a + b; break;
case 1: res = a - b; break;
case 2: res = a * b; break;
case 3: if (a % b == 0) res = a / b; break;
}
switch (j)
{
case 0: res += c; break;
case 1: res -= c; break;
case 2: res *= c; break;
case 3: if (b != 0 && res % c == 0) res /= c; break;
}
switch (k)
{
case 0: res += d; break;
case 1: res -= d; break;
case 2: res *= d; break;
case 3: if (c != 0 && res % d == 0) res /= d; break;
}
if (res == 24)
{
flag = true;
break;
}
}
if (flag) break;
}
if (flag) break;
}
if (flag) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}
```
思路解析:
题目要求判断四个数能否通过加减乘除运算得到24。因为只有4个数,所以可以直接枚举所有可能的运算符顺序和组合。
具体来说,我们可以用4个变量 `a`、`b`、`c`、`d` 分别代表四个数字,然后枚举所有可能的运算符顺序和组合,计算出最终的结果。如果结果等于24,则说明这个游戏的解是正确的。
需要注意的是,除法运算需要判断除数是否为0以及是否能整除,避免出现除数为0或者结果为小数的情况。另外,由于运算符有四种,所以需要进行三重循环来枚举所有可能的运算符顺序和组合。
最后,根据结果输出 Yes 或 No 即可。
阅读全文