摘自@

#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;
}