摘自@
#include<bits/stdc++.h>
#include<windows.h>
#define int long long
using namespace std;
int a[5];
bool u;
char opt[5] = {'+', '-', '*', '/'};
// 计算两个数的运算结果
int calc(int a, int b, char ch) {
if (ch == '+') return a + b;
if (ch == '-') return max(a, b) - min(a, b);
if (ch == '*') return a * b;
if (ch == '/') return (b == 0 || a < b || a % b ? -99999999 : a / b);
}
// 打印解题步骤
void print(int a, int b, int c, int d, int e, int f, char ch1, char ch2, char ch3) {
cout << max(a, b) << ch1 << min(a, b) << "=" << calc(a, b, ch1) << endl;
cout << max(c, d) << ch2 << min(c, d) << "=" << calc(c, d, ch2) << endl;
cout << max(e, f) << ch3 << min(e, f) << "=" << calc(e, f, ch3) << endl;
u = 0;
return;
}
// 判断当前4个数字是否有解(能算出24)
bool has_solution(int nums[]) {
int temp[5];
// 复制数组避免修改原数据
for (int i = 1; i <= 4; i++) temp[i] = nums[i];
sort(temp + 1, temp + 5);
do {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
int res1 = calc(temp[1], temp[2], opt[i]);
int res2 = calc(temp[3], temp[4], opt[j]);
if (calc(res1, res2, opt[k]) == 24) return true;
int res3 = calc(calc(temp[1], temp[2], opt[i]), temp[3], opt[j]);
if (calc(res3, temp[4], opt[k]) == 24) return true;
}
}
}
} while (next_permutation(temp + 1, temp + 5));
return false;
}
signed main() {
srand(time(NULL));
int t = 0;
while (1) {
u = 1;
a[1] = rand() % 13 + 1;
a[2] = rand() % 13 + 1;
a[3] = rand() % 13 + 1;
a[4] = rand() % 13 + 1;
if (!has_solution(a)) {
continue;
}
++t;
cout << "---------------------【第" << t << "题】----------------------\n";
cout << a[1] << ' ' << a[2] << ' ' << a[3] << ' ' << a[4] << endl;
system("pause");
sort(a + 1, a + 5);
do {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
if (calc(calc(a[1], a[2], opt[i]), calc(a[3], a[4], opt[j]), opt[k]) == 24 && u) {
print(a[1], a[2], a[3], a[4], calc(a[1], a[2], opt[i]), calc(a[3], a[4], opt[j]), opt[i], opt[j], opt[k]);
}
if (calc(calc(calc(a[1], a[2], opt[i]), a[3], opt[j]), a[4], opt[k]) == 24 && u) {
print(a[1], a[2], calc(a[1], a[2], opt[i]), a[3], calc(calc(a[1], a[2], opt[i]), a[3], opt[j]), a[4], opt[i], opt[j], opt[k]);
}
}
}
}
} while (next_permutation(a + 1, a + 5));
Sleep(2026);
system("cls");
}
return 0;
}