プログラミング初心者です。
サブルーチンを用いて、ハノイの塔の解を求める課題で詰まっています。
解自体は求めることができたのですが、それぞれの解の順番(輪を移動させる順番)を一緒に表示させよという指示が出ており、この方法がわかりません。
表示順に上から番号を振るという考え方でよろしいのでしょうか。
まず考え方自体が違うようであれば、そこから指摘して頂きたいと思います。
よろしくお願いします。
ちなみに現状ではこのようになっております。
#!/usr/bin/perl
sub hanoi {
my ($no , $x , $y , $z) = @_;
if( $no = $no){
hanoi ($no-1,$x,$z,$y);
print "Move", $no ,"from" , "$x" , "to" , "$z" , "\n";
hanoi ($no-1,$y,$x,$z);
}
}
print"入力された枚数のハノイの塔の解(順番付き)\n";
$data=<>*1;
hanoi($data , "A" , "B" , "C");
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
「解の順番」というのは、以下のようなアウトプットを想定していると言うことでしょうか?
入力された枚数のハノイの塔の解(順番付き)
(1) Move 1 from A to C
(2) Move 2 from A to B
(3) Move 1 from C to B
(4) Move 3 from A to C
(5) Move 1 from B to A
(6) Move 2 from B to C
(7) Move 1 from A to C
だとすれば、以下のような以下のようなスクリプトになります。
--------------------------------------------------------------------------------------------
sub hanoi {
my ($no , $x , $y , $z) = @_;
if($no==1){
$cnt++;
print"($cnt) Move ", $no ," from " , "$x" , " to " , "$z" , "\n";
}
else{
hanoi ($no - 1,$x,$z,$y);
$cnt++;
print"($cnt) Move ", $no ," from " , "$x" , " to " , "$z" , "\n";
hanoi ($no - 1,$y,$x,$z);
}
}
print"入力された枚数のハノイの塔の解(順番付き)\n";
$cnt=0;
$data=3;
hanoi($data , "A" , "B" , "C");
--------------------------------------------------------------------------------------------
No.1
- 回答日時:
"Move" の後に表示される数字は、小さい順から付けられた輪の名称になります。
3枚で実行すると、次のように表示されます。Move1fromAtoC
Move2fromAtoB
Move1fromCtoB
Move3fromAtoC
Move1fromBtoA
Move2fromBtoC
Move1fromAtoC
初期状態の A のポールに 1, 2, 3 の輪が積まれているのを想起すれば、どの輪を移動したかわかるので適切な表示だと思います。指示の意味がもう1つわからないところがありますが.....。
1
2
3
A B C
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Excel(エクセル) マクロ 2行ごとの並び替えについて 4 2022/12/14 12:27
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- Excel(エクセル) エクセル 行番号を自動で振るには 3 2022/08/08 20:19
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- 英語 英文の経済記事ですが、 4 2022/07/23 18:01
- Excel(エクセル) エクセル、日々の集計整理方法。(再送です。) 5 2022/10/02 00:19
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- Excel(エクセル) Excelの操作方法を教えてください!頭文字2~8文字で特定の値に返す方法 8 2022/07/14 11:26
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PICで世界時計を作りたいのですが
-
前日の日付取得するには?
-
大至急お願いします。出力で悩み。
-
Perlの日付の比較に関して
-
日付求め
-
mod_rewriteが反映されない
-
年月日の数値化?
-
Application.ScreenUpdating = ...
-
int(input("○○"))の使い方
-
PerlでXMLを解析して出力する。
-
整数でないとき
-
CGI メールフォームからBCCのア...
-
CGI初心者です
-
1つのプログラム内で"html出力...
-
JSONで文字列が長い時
-
確認画面に空白がでます
-
optionのselectedは更新時は効...
-
perlがうごきません
-
awkの正規表現での最左最短マッ...
-
javaのパッケージ構成で各パッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
先月(YYYYMM)の生成方法
-
日齢計算プログラム
-
大至急お願いします。出力で悩み。
-
2つの日付・時間の差分を求め...
-
サマータイムの判定について
-
CSV読み込み時に条件に合う行(...
-
1桁の日付に0を付ける
-
Perlの日付の比較に関して
-
ソースの詳細を教えてください。
-
当日の日付をプルダウンメニュ...
-
前日の日付取得するには?
-
日付の差分の求め方(日、分)
-
体重が3kg増える/減る の英語...
-
日付範囲をの連番と月末を取得
-
PICで世界時計を作りたいのですが
-
Schemeのプログラミング うる...
-
PerlからMysqlに接続してデータ...
-
perlでcheckboxがうまく整理で...
-
年令の計算方法
-
Perlで60進数を作りたい
おすすめ情報