用C语言写以下问题的代码【题目背景】 二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上数字的运算结果为24. 【题目描述】 定义每一个游戏由4个从1-9的数字和3个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。加法用+表示,减法用-表示,乘法用小写字母x表示,除法用/表示。在游戏里除法为整除。 老师给了你n个游戏的解,请你编写程序验证每个游戏的结果是否为24. 【输入格式】 从标准输入读入数据。 第一行输入一个整数n,从第二行开始到第n+1行中,每一行包含一个长度为7的字符串,为上述的24点游戏,保证数据格式合法。 【输出格式】 输出到标准输出。 包含n行,对于每一个游戏,如果其结果为24则输出字符串Yes, 否则输出字符串No。
时间: 2024-02-18 15:59:33 浏览: 71
C语言实现纸牌计算24点小游戏
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
int calculate(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case 'x': return a * b;
case '/': return a / b;
default: return 0;
}
}
int check(int a, int b, int c, int d) {
char ops[] = {'+', '-', 'x', '/'};
int i, j, k;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++) {
if (calculate(calculate(calculate(a, b, ops[i]), c, ops[j]), d, ops[k]) == 24) {
return 1;
}
if (calculate(calculate(a, calculate(b, calculate(c, d, ops[k]), ops[j]), ops[i]), 24) == 24) {
return 1;
}
}
}
}
return 0;
}
int main() {
int n;
scanf("%d", &n);
while (n--) {
char s[8];
int a, b, c, d;
scanf("%s", s);
a = s[0] - '0';
b = s[2] - '0';
c = s[4] - '0';
d = s[6] - '0';
if (check(a, b, c, d)) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
```
解释:
首先,我们定义一个 `calculate` 函数,用于计算两个数字和一个运算符的结果。接着,我们定义一个 `check` 函数,用于检查4个数字是否可以通过3个运算符得到24。在 `check` 函数中,我们使用3个嵌套循环来枚举所有可能的运算符排列组合,然后依次计算4个数字的结果,判断是否等于24。注意,由于题目要求除法为整除,因此在 `calculate` 函数中,我们使用了 C 语言中的整数除法。
在主函数中,我们首先读入游戏的数量,然后逐个读入游戏字符串。对于每个游戏字符串,我们从中提取出4个数字,并调用 `check` 函数进行验证。如果验证结果为真,则输出 "Yes",否则输出 "No"。
阅读全文