fork(3) download
  1. #include <stdio.h>
  2.  
  3. int inuse[16];
  4. int results[16+15+14];
  5.  
  6. FILE *fout;
  7.  
  8. int check(int number)
  9. {
  10. if (number > 0 && number < 17 && !inuse[number-1])
  11. {
  12. return inuse[number-1]=1;
  13. }
  14. return 0;
  15. }
  16.  
  17. void free(int number)
  18. {
  19. inuse[number-1]=0;
  20. }
  21.  
  22. void out(int t, int* p)
  23. {
  24. int i;
  25. fprintf(fout, "\n%d",t);
  26. for(i=0; i< 16; i++) fprintf(fout, " %d",*p++);
  27. }
  28.  
  29. void scan()
  30. {
  31. int p[16];
  32. int t,i;
  33. for (p[0]=0; p[0]++<16;) if (check(p[0]))
  34. {
  35. for (p[1]=0; p[1]++<16;) if (check(p[1]))
  36. {
  37. for (p[2]=0; p[2]++<16;) if (check(p[2]))
  38. {
  39. t = p[0]+p[1]+p[2]; // top horiz: 0,1,2
  40. for (p[7]=0; p[7]++<16;) if (check(p[7]))
  41. {
  42. if (check(p[11] = t-p[7]-p[2])) // right vert: 2,7,11
  43. {
  44. for(p[9]=0; p[9]++<16;) if (check(p[9]))
  45. {
  46. for (p[10]=0; p[10]++<16;) if (check(p[10]))
  47. {
  48. if (check(p[12] = t-p[9]-p[10]-p[11])) // right horiz: 9,10,11,12
  49. {
  50. for(p[6]=0; p[6]++<16;) if (check(p[6]))
  51. {
  52. if (check(p[15] = t-p[0]-p[6]-p[9])) // middle vert: 0,6,9,15
  53. {
  54. for(p[13]=0; p[13]++<16;) if (check(p[13]))
  55. {
  56. if (check(p[14] = t-p[13]-p[15])) // bottom horiz: 13,14,15
  57. {
  58. for(p[4]=0; p[4]++<16;) if (check(p[4]))
  59. {
  60. if (check(p[8] = t-p[4]-p[13])) // left vert: 4,8,13
  61. {
  62. for(p[3]=0; p[3]++<16;) if (check(p[3]))
  63. {
  64. if (check(p[5] = t-p[3]-p[4]-p[6])) // left horiz: 3,4,5,6
  65. {
  66. ++results[t];
  67. //out(t,p);
  68. free(p[5]);
  69. }
  70. free(p[3]);
  71. }
  72. free(p[8]);
  73. }
  74. free(p[4]);
  75. }
  76. free(p[14]);
  77. }
  78. free(p[13]);
  79. }
  80. free(p[15]);
  81. }
  82. free(p[6]);
  83. }
  84. free(p[12]);
  85. }
  86. free(p[10]);
  87. }
  88. free(p[9]);
  89. }
  90. free(p[11]);
  91. }
  92. free(p[7]);
  93. }
  94. free(p[2]);
  95. }
  96. free(p[1]);
  97. }
  98. free(p[0]);
  99. }
  100. for(i=0;i<15+16+14;i++)
  101. {
  102. if(results[i]) printf("%d %d\n", i, results[i]);
  103. }
  104. }
  105.  
  106.  
  107. void main()
  108. {
  109. //fout = fopen("c:\\temp\\puzzle29.txt", "w");
  110. scan();
  111. //fclose(fout);
  112. }
Success #stdin #stdout 0.66s 2112KB
stdin
Standard input is empty
stdout
27 4440
28 7400
29 9368
30 6096
31 5104
32 1200