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