演習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);
}