fork(7) download
  1. #include <stdio.h>
  2.  
  3. #define ROW 2
  4. #define COLUMN 100
  5.  
  6. int FLAG(int new4,int new3,int i);
  7.  
  8. int a[ROW][COLUMN]={0};
  9.  
  10. int main(void)
  11. {
  12. int new4=0,new3=0;
  13. int i,pre4,pre3;
  14. int g=a[0][0]+a[1][0];
  15.  
  16. printf("水差し問題\n");
  17. printf("4L=%d,3L=%d,Goukei=%d\n",a[0][0],a[1][0],g);
  18.  
  19. for(i=1;i<100;i++){ //
  20. pre4=a[0][i-1];
  21. pre3=a[1][i-1];
  22. g=pre4+pre3;
  23. if(pre4==2 && pre3==0){
  24. printf("-終了-\n"); // [2] [0]の状態で終了 を表示
  25. return 0;
  26. }
  27. while (1) {
  28. if(pre4<4){ // 4Lが4未満なら、4L=4、3L=そのまま
  29. new4=4;
  30. new3=pre3;
  31. if (FLAG(new4,new3,i)) break;
  32. }
  33. if(pre3<3){ // 3Lが3未満なら、4L=そのまま、3L=3
  34. new4=pre4;
  35. new3=3;
  36. if (FLAG(new4,new3,i)) break;
  37. }
  38. if(pre4>0){ // 4Lが0超えなら、4L=0、3L=そのまま
  39. new4=0;
  40. new3=pre3;
  41. if (FLAG(new4,new3,i)) break;
  42. }
  43. if(pre3>0){ // 3Lが0超えなら、4L=そのまま、3L=0
  44. new4=pre4;
  45. new3=0;
  46. if (FLAG(new4,new3,i)) break;
  47. }
  48. // 合計が3以上、4Lが0超え、3Lが3未満なら、4L=合計-3、3L=3
  49. if(g>=3 && pre4>0 && pre3<3){
  50. new4=pre4+pre3-3;
  51. new3=3;
  52. if (FLAG(new4,new3,i)) break;
  53. }
  54. // 合計が4以上、4Lが4未満、3Lが0超えなら、4L=4、3L=合計-4
  55. if(g>=4 && pre4<4 && pre3>0){
  56. new3=pre4+pre3-4;
  57. new4=4;
  58. if (FLAG(new4,new3,i)) break;
  59. }
  60. // 合計が4未満、4Lが4未満、3Lが0超えなら、4L=全部、3L=0
  61. if(g<4 && pre4<4 && pre3>0){
  62. new4=pre4+pre3;
  63. new3=0;
  64. if (FLAG(new4,new3,i)) break;
  65. }
  66. // 合計が3未満、4Lが0超え、3Lが3未満なら、4L=0、3L=全部
  67. if(g<3 && pre4>0 && pre3<3){
  68. new3=pre4+pre3;
  69. new4=0;
  70. if (FLAG(new4,new3,i)) break;
  71. }
  72. printf("-解なし-\n");
  73. return 1;
  74. }
  75. a[0][i]=new4;
  76. a[1][i]=new3;
  77. g=a[0][i]+a[1][i];
  78. printf("4L=%d,3L=%d,Goukei=%d\n",a[0][i],a[1][i],g);
  79. }
  80. }
  81.  
  82. // 戻り値:0=履歴にあり(試行未決定)1=履歴になし(試行決定)
  83. int FLAG(int new4,int new3,int i)
  84. {
  85. int j;
  86.  
  87. for(j=0;j<i;j++){
  88. if(new4==a[0][j] && new3==a[1][j]){
  89. return 0;
  90. }
  91. }
  92. return 1;
  93. }
  94.  
Success #stdin #stdout 0.02s 1720KB
stdin
Standard input is empty
stdout
水差し問題
4L=0,3L=0,Goukei=0
4L=4,3L=0,Goukei=4
4L=4,3L=3,Goukei=7
4L=0,3L=3,Goukei=3
4L=3,3L=0,Goukei=3
4L=3,3L=3,Goukei=6
4L=4,3L=2,Goukei=6
4L=0,3L=2,Goukei=2
4L=2,3L=0,Goukei=2
-終了-