fork download
  1. /*
  2. http://p...content-available-to-author-only...h.net/test/read.cgi/tech/1402622093/81
  3. [ プログラム ] プログラミングのお題スレ Part4
  4.  
  5. 81 名前:デフォルトの名無しさん [sage]: 2014/06/20(金) 00:35:34.20 ID:eyF0lSTD
  6. お題:0から9のうち8種類の数字を使って4桁の10進数を2個つくり、その積をとると
  7. 4桁の2個の数に使用した8種類の数字はひとつも現れなかった。
  8. この4桁の2個の10進数を求める。
  9. */
  10. #include<stdio.h>
  11. #include<stdlib.h>
  12.  
  13. //左辺と右辺で同じ数字があるか探す
  14. // -1:同じ数字あり
  15. // 0:なし
  16. // -2:左の項が右より大きくなったので、重複回避のため計算しない
  17. int keisan(int *res, int *a)
  18. {
  19. int r, x, i, aa, bb;
  20.  
  21. aa = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
  22. bb = a[4] * 1000 + a[5] * 100 + a[6] * 10 + a[7];
  23. if (aa > bb)
  24. return -2;
  25. r = *res = aa * bb;
  26. while (r) {
  27. x = r % 10;
  28. for (i = 0; i < 8; i++)
  29. if (a[i] == x)
  30. return -1;
  31. r /= 10;
  32. }
  33.  
  34. return 0;
  35. }
  36.  
  37. //左辺に同じ数字があるか探す
  38. // -1: 同じ数字あり
  39. // 0: ok
  40. int check(int *a, int n)
  41. {
  42. int i;
  43.  
  44. for (i = 0; i < n; i++)
  45. if (a[i] == a[n])
  46. return -1;
  47.  
  48. return 0;
  49. }
  50.  
  51. //
  52. int main()
  53. {
  54. int a[8], r;
  55.  
  56. for (a[0] = 1; a[0] < 10; a[0]++) {
  57. for (a[1] = 0; a[1] < 10; a[1]++) { if (check(a, 1)) continue;
  58. for (a[2] = 0; a[2] < 10; a[2]++) { if (check(a, 2)) continue;
  59. for (a[3] = 0; a[3] < 10; a[3]++) { if (check(a, 3)) continue;
  60. for (a[4] = 1; a[4] < 10; a[4]++) { if (check(a, 4)) continue;
  61. for (a[5] = 0; a[5] < 10; a[5]++) { if (check(a, 5)) continue;
  62. for (a[6] = 0; a[6] < 10; a[6]++) { if (check(a, 6)) continue;
  63. for (a[7] = 0; a[7] < 10; a[7]++) { if (check(a, 7)) continue;
  64. switch (keisan(&r, a)) {
  65. case -1:
  66. case -2:
  67. break;
  68. case 0:
  69. printf("%d%d%d%d x %d%d%d%d = %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], r);
  70. break;
  71. default:
  72. fprintf(stderr, "err\n");
  73. exit(1);
  74. }
  75. } } } } } } } }
  76.  
  77. return 0;
  78. }
  79.  
Success #stdin #stdout 0.12s 2248KB
stdin
Standard input is empty
stdout
5049 x 6712 = 33888888