N88-BASIC,Cでハノイの塔 (4回目)

  
2025/1/1()
N88-BASIC,Cハノイの塔 (4回目)
 
再帰を使用した手順(hanoi)
Cで書く
 
■ 前提
▼ 参照
https://ulprojectmail.blogspot.com/2024/12/hanoi-1.html
ハノイの塔 (1回目)
より
 
 ルール
3本(A,B,C)の棒とn枚の円盤(小さい順に1~nとする)がある
Aに1~nの円盤が上から順に積まれている
小さい円盤の上に大きい円盤は置けない
1度に動かせる円盤は1枚のみ
 
 目標
1~nの円盤全てをCに移動させる
 
 Cの一部
#include <stdio.h>
static
void hanoi1(int n, int h, char p1, char p2, char p3)
{
    if (n >  1) hanoi1(n - 1, h, p1, p3, p2);
    if (n >= h) printf(" %2d:%c->%c", n, p1, p3);
    if (n >  1) hanoi1(n - 1, h, p2, p1, p3);
}
void main(void)
{
    int n = 3;
    int h = 1;
 
    hanoi1(n, h, 'A', 'B', 'C');
}
 
 nの時の手順
A,B,Cを(pole)p1,p2,p3と表現しています
 
if (n >  1) hanoi1(n - 1, h, p1, p3, p2);
1~n-1の円盤をA->B (p1->p2)
 
if (n >= h) printf(" %2d:%c->%c", n, p1, p3);
nの円盤をA->C (p1->p3)
 
if (n >  1) hanoi1(n - 1, h, p2, p1, p3);
1~n-1の円盤をB->C (p1->p3)
 
以上の手順で完成する
 
動作
変数名など内部ではA,B,Cを(pole)1,2,3と表現しています
 
n hを入力し
1:A->Cの様に円盤の番号1~n(小~大)と棒A,B,C間の移動を表示する
h以上の円盤の移動のみ表示します
今回の手順は再帰を使用しています
 
VL,NL,XL-BASICとdlg~.zip(han004.c)は
このブログ(以下のリンク)から
ダウンロードできます
https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい


 










このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)