fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 9
  4.  
  5. char ops[] = "+-*/";
  6.  
  7. void
  8. nToExpr(int n, int *v, char *op)
  9. {
  10. int i;
  11. for (i = 0; i < N; i++) {
  12. v[i] = i + 1;
  13. op[i] = ops[n % 4];
  14. n /= 4;
  15. }
  16. op[N - 1] = '=';
  17. }
  18.  
  19. void
  20. pp(int *v, char *op)
  21. {
  22. int i;
  23. for (i = 0; i < N; i++)
  24. printf("%d%c ", v[i], op[i]);
  25. putchar('\n');
  26. }
  27.  
  28. int
  29. calc(int *v, char *op)
  30. {
  31. int r, i, t, flg;
  32. char w[10];
  33. /* 空白処理 */
  34.  
  35. /* for (i = N - 1; i >= 0; i--) { */
  36. /* if (op[i] == ' ') { */
  37. /* sprintf(w, "%d%d", v[i], v[i + 1]); */
  38. /* v[i] = atoi(w); */
  39. /* op[i] = '+'; */
  40. /* v[i + 1] = 0; */
  41. /* } */
  42. /* } */
  43.  
  44. /* '-'を'+'に書き換え */
  45. for(i=0; i<N; i++) {
  46. if(op[i]=='-') {
  47. v[i+1]=-v[i+1];
  48. op[i]='+';
  49. }
  50. }
  51.  
  52. /* '/'と'*'とを 入れ替 */
  53. do {
  54. flg = 0;
  55. for (i = 0; i < N - 1; i++) {
  56. if ((op[i] == '/') && (op[i + 1] == '*')) {
  57. flg = 1;
  58. op[i] = '*';
  59. op[i + 1] = '/';
  60. t = v[i + 1];
  61. v[i + 1] = v[i + 2];
  62. v[i + 2] = t;
  63. }
  64. }
  65. } while (flg);
  66.  
  67. /* '*'、'/'を先に計算 */
  68. for (i = 0; i < N - 1; i++) {
  69. switch (op[i]) {
  70. case '*':
  71. v[i+1]*=v[i];
  72. v[i]=0;
  73. op[i]='+';
  74. break;
  75. case '/':
  76. v[i+1]=v[i]/v[i+1];
  77. v[i]=0;
  78. op[i]='+';
  79. break;
  80. default:
  81. break;
  82. }
  83. }
  84.  
  85. r=v[0];
  86. for (i = 0; i < N - 1; i++) {
  87. r+=v[i+1];
  88. }
  89.  
  90. return r;
  91. }
  92.  
  93.  
  94. int
  95. main()
  96. {
  97. int v[N], i, n;
  98. char op[N];
  99.  
  100. n = 1;
  101. i = sizeof(op) - 1;
  102. while (i--)
  103. n *= sizeof(ops) - 1;
  104.  
  105. while (n--) {
  106. nToExpr(n, v, op);
  107.  
  108. /* pp(v, op); */
  109. /* printf("%d\n",calc(v, op)); */
  110.  
  111. if(calc(v, op)==100) {
  112. nToExpr(n, v, op);
  113. pp(v,op);
  114. }
  115.  
  116. }
  117.  
  118. return 0;
  119. }
Success #stdin #stdout 0.03s 1720KB
stdin
Standard input is empty
stdout
1+ 2+ 3* 4* 5+ 6* 7* 8/ 9= 
1/ 2+ 3* 4/ 5* 6* 7- 8/ 9= 
1/ 2+ 3* 4/ 5* 6* 7+ 8/ 9= 
1/ 2* 3* 4/ 5/ 6* 7* 8* 9= 
1* 2/ 3/ 4/ 5* 6* 7* 8* 9= 
1* 2* 3* 4+ 5* 6/ 7+ 8* 9= 
1* 2+ 3+ 4* 5/ 6* 7+ 8* 9= 
1- 2* 3+ 4/ 5* 6* 7+ 8* 9= 
1* 2* 3- 4* 5+ 6* 7+ 8* 9= 
1+ 2+ 3- 4* 5+ 6* 7+ 8* 9= 
1+ 2- 3* 4- 5+ 6* 7+ 8* 9= 
1- 2* 3- 4- 5+ 6* 7+ 8* 9= 
1- 2/ 3+ 4+ 5* 6- 7+ 8* 9= 
1+ 2/ 3+ 4+ 5* 6- 7+ 8* 9= 
1/ 2* 3+ 4+ 5* 6- 7+ 8* 9= 
1* 2* 3* 4+ 5+ 6- 7+ 8* 9= 
1+ 2* 3* 4* 5/ 6+ 7+ 8* 9= 
1- 2+ 3/ 4* 5* 6+ 7+ 8* 9= 
1+ 2- 3* 4+ 5* 6+ 7+ 8* 9= 
1- 2* 3- 4+ 5* 6+ 7+ 8* 9= 
1+ 2* 3+ 4* 5- 6+ 7+ 8* 9= 
1- 2* 3+ 4* 5+ 6+ 7+ 8* 9= 
1* 2* 3+ 4+ 5+ 6+ 7+ 8* 9= 
1+ 2+ 3+ 4+ 5+ 6+ 7+ 8* 9= 
1- 2+ 3* 4* 5- 6+ 7* 8- 9= 
1- 2+ 3* 4* 5+ 6* 7+ 8- 9= 
1* 2/ 3* 4* 5* 6/ 7* 8+ 9= 
1- 2/ 3+ 4+ 5* 6+ 7* 8+ 9= 
1+ 2/ 3+ 4+ 5* 6+ 7* 8+ 9= 
1/ 2* 3+ 4+ 5* 6+ 7* 8+ 9= 
1* 2* 3* 4+ 5+ 6+ 7* 8+ 9= 
1- 2+ 3* 4/ 5* 6* 7- 8+ 9=