c
1#include <stdio.h> 2int k=0; 3void Hanoi(int n,char *X,char *Y,char *Z){ 4 if(n>=2) 5 Hanoi(n-1,X,Z,Y); 6 k++; 7 printf("Step %d;move %d from %s to %s \n",k,n,X,Z); 8 if(n>=2) 9 Hanoi(n-1,Y,X,Z); 10} 11 12int main(void){ 13 Hanoi(3,"A","B","C"); 14 return 0; 15 } 16 17 18 19```### このハノイの塔のプログラムから改良して以下のように図にしたいです。 20 21//A: 3 2 1 22//B: 23//C: 24//----- 25//A: 3 2 26//B: 27//C: 1 28//----- 29 30### 補足情報 31 32プログラミング初心者です。 33よろしくお願いします。
Step 1 ;move 1 from A to C
Step 2 ;move 2 from A to B
Step 3 ;move 1 from B to A
Step 4 ;move 3 from A to C
Step 5 ;move 1 from C to B
Step 6 ;move 2 from C to A
Step 7 ;move 1 from A to C
実行すると上記のようになりましたが、間違っていませんか?
Step 3 で C にあるはずの 1 が B から移動しています。
そして 1 の下にある 3 が Step 4 で移動しています。
#include <stdio.h>
void Hanoi(int n,char *X,char *Y,char *Z){
if(n>=2)
Hanoi(n-1,X,Z,Y);
printf("Step ;move %d from %s to %s \n",n,X,Z);
if(n>=2)
Hanoi(n-1,Y,X,Z);
}
int main(void){
Hanoi(3,"A","B","C");
return 0;
}
このプログラムなら正常に実行できますが、step数の出し方がわからないです。
ステップ数は Hanoi 関数が呼び出されるたびに 1 増えているだけです。
新しい方のコードも終了条件が無いので正常に実行できません。
実際にコンパイルして動かしていますか?
#include <stdio.h>
int k;
void Hanoi(int n,char *X,char *Y,char *Z){
if(n>=2)
Hanoi(n-1,X,Z,Y);
printf("Step %d;move %d from %s to %s \n",k,n,X,Z);
if(n>=2)
Hanoi(n-1,Y,X,Z);
k++;
}
int main(void){
Hanoi(3,"A","B","C");
return 0;
}
実行するとこうなっています。どこを修正すればいいのでしょうか、、。
Step 0;move 1 from A to C
Step 1;move 2 from A to B
Step 1;move 1 from C to B
Step 3;move 3 from A to C
Step 3;move 1 from B to A
Step 4;move 2 from B to C
Step 4;move 1 from A to C
今度は動きましたが、ステップが違います。
初期化されていないので、まず int k; を int k = 0; に変えてください。それから k++; を printf の直前の行に持ってきてください。
出来ました。
本当にありがとうございます。
質問を編集してコードを書き換えてください。その際は
```C
int main(void) {
...
...
```
のように、```C と ``` の間にコードを入れてください。` はバッククォートです。<code> ボタンを押すと出てきます。
このようにすると、#include の前の / は要りませんし、インデントも正しく表示されます。
これでよろしいでしょうか、、?
main の最後の } の位置がおかしいですが、あとは OK です。
回答4件
あなたの回答
tips
プレビュー