再帰呼び出しの演習問題

演習5-6
テキストp.188のList5-6を、軸の名前を数値ではなく名称(A軸・B軸・C軸)で表示するようにプログラムを変更せよ。

元のプログラム

#include <stdio.h>
 
void move(int no, int x, int y) 
{
    if (no > 1)
        move(no - 1, x, 6 - x - y);
    printf("円盤[%d]を%d軸から%d軸へ移動\n", no, x, y);
    if (no > 1)
        move(no - 1, 6 - x - y, y);
}
 
int hmain(void) 
{
    int n;
    printf("ハノイの塔\n円盤の枚数: ");
    scanf("%d", &n);
    move(n, 1, 3);
    return 0;
}

「1軸・2軸・3軸」を「A軸・B軸・C軸」に変更するには?
①「1軸・2軸・3軸」に対応する軸の名前を、文字列の配列で用意する。
②printf()で%dで出力している部分を文字列用の%sに置き換え、
③引数では文字列配列を渡すようにする。

void move(int no, int x, int y) 
{
    char name[3][4] = { "A", "B", "C" };  // ①
    if (no > 1)
        move(no - 1, x, 6 - x - y);
    printf("円盤[%d]を%s軸から%s軸へ移動\n", no, name[x - 1], name[y - 1]); // ②・③
    if (no > 1)
        move(no - 1, 6 - x - y, y);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です