记录编号 43124 评测结果 WAAAAWAAAA
题目名称 算24点 最终得分 80
用户昵称 Gravatar王者自由 是否通过 未通过
代码语言 C++ 运行时间 0.003 s
提交时间 2012-10-07 10:29:36 内存使用 1.96 MiB
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const char ch[] = "0+-*/";
int n, s, l;
int d[5], r[5][5];
void print() {
    for(int i=1; i<4; i++) {
        for(int j=1; j<4; j++)
            if(j != 2) printf("%d", r[i][j]);
            else printf("%c", ch[r[i][j]]);
        printf("=%d\n", r[i][4]);
    } exit(0);
}
void DFS(int k, int d[]) {
    if(k == 1) {
        if(d[1] == 24) print();
    } else {
        int a, b, t, e[5] = {0};
        for(int i=1; i<k; i++)
            for(int j=i+1; j<=k; j++) {
                a = d[i], b = d[j];
                if(a < b) swap(a, b);
                t = 0;
                for(int l=1; l<=k; l++)
                    if(l != i && l != j)
                        e[++t] = d[l];
                r[5-k][1] = a, r[5-k][3] = b, r[5-k][4] = -1;
                for(int l=1; l<5; l++) {
                    if(l == 1)
                        r[5-k][4] = a + b;
                    else if(l == 2)
                        r[5-k][4] = a - b;
                    else if(l == 3)
                        r[5-k][4] = a * b;
                    else if(l == 4 && b && a % b == 0)
                        r[5-k][4] = a / b;
                    r[5-k][2] = l;
                    if(r[5-k][4] != -1) {
                        e[t+1] = r[5-k][4];
                        DFS(k-1, e);
                    }
                }
            }
    }
}
int main() {
    freopen("point24.in", "r", stdin);
    freopen("point24.out", "w", stdout);
    for(int i=1; i<5; i++)
        scanf("%d", d+i);
    DFS(4, d);
    printf("No answer!\n");
    return 0;
}