记录编号 43124 评测结果 WAAAAWAAAA
题目名称 算24点 最终得分 80
用户昵称 Gravatar王者自由 是否通过 未通过
代码语言 C++ 运行时间 0.003 s
提交时间 2012-10-07 10:29:36 内存使用 1.96 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <algorithm>
  4. using namespace std;
  5. const char ch[] = "0+-*/";
  6. int n, s, l;
  7. int d[5], r[5][5];
  8. void print() {
  9. for(int i=1; i<4; i++) {
  10. for(int j=1; j<4; j++)
  11. if(j != 2) printf("%d", r[i][j]);
  12. else printf("%c", ch[r[i][j]]);
  13. printf("=%d\n", r[i][4]);
  14. } exit(0);
  15. }
  16. void DFS(int k, int d[]) {
  17. if(k == 1) {
  18. if(d[1] == 24) print();
  19. } else {
  20. int a, b, t, e[5] = {0};
  21. for(int i=1; i<k; i++)
  22. for(int j=i+1; j<=k; j++) {
  23. a = d[i], b = d[j];
  24. if(a < b) swap(a, b);
  25. t = 0;
  26. for(int l=1; l<=k; l++)
  27. if(l != i && l != j)
  28. e[++t] = d[l];
  29. r[5-k][1] = a, r[5-k][3] = b, r[5-k][4] = -1;
  30. for(int l=1; l<5; l++) {
  31. if(l == 1)
  32. r[5-k][4] = a + b;
  33. else if(l == 2)
  34. r[5-k][4] = a - b;
  35. else if(l == 3)
  36. r[5-k][4] = a * b;
  37. else if(l == 4 && b && a % b == 0)
  38. r[5-k][4] = a / b;
  39. r[5-k][2] = l;
  40. if(r[5-k][4] != -1) {
  41. e[t+1] = r[5-k][4];
  42. DFS(k-1, e);
  43. }
  44. }
  45. }
  46. }
  47. }
  48. int main() {
  49. freopen("point24.in", "r", stdin);
  50. freopen("point24.out", "w", stdout);
  51. for(int i=1; i<5; i++)
  52. scanf("%d", d+i);
  53. DFS(4, d);
  54. printf("No answer!\n");
  55. return 0;
  56. }