递归函数解决24点代码c语言
时间: 2023-03-14 22:59:57 浏览: 52
24 点是一个数学游戏,目标是使用 4 个给定的数字和加减乘除运算符,使得计算的结果为 24。
下面是用递归函数解决 24 点游戏的 C 语言代码的一种方法:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义运算符的枚举类型
typedef enum {ADD, SUB, MULT, DIV} Operator;
// 定义递归函数,用于计算表达式的值
double calculate(double a, double b, Operator op) {
switch (op) {
case ADD:
return a + b;
case SUB:
return a - b;
case MULT:
return a * b;
case DIV:
return a / b;
}
}
// 定义递归函数,用于解决 24 点游戏
bool solve24(double *numbers, int n) {
if (n == 1) {
// 如果只剩一个数字,判断是否为 24
return abs(numbers[0] - 24) < 1e-6;
}
// 遍历所有数字对
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
// 保存剩余数字
double remaining[3];
int k = 0;
for (int l = 0; l < n; l++) {
if (l != i && l != j) {
remaining[k++] = numbers[l];
}
}
// 遍历所有运算符
for (int l = 0; l < 4; l++) {
Operator op = l;
double result = calculate(numbers[i], numbers[j], op);
// 将计算结果加入剩余数字数组中
remaining[2] = result;
if (solve24(remaining, 3)) {
return true;
}
}
}
}
return false;
}
int main() {
// 定义要给定的 4 个数字
double numbers[] = {4, 7, 8, 9};