|
想尝试用乐高来挑战 不为比赛 请问各位高人用什么语言进行编程 计算步骤 运行结果类似下文汉诺塔 给出步骤
问题描述
有9个环 3个灰色 3个黄色 3个蓝色
有3个柱子 灰 黄 蓝
抽签随机分配 环的位置 但每根柱子最多套5层环 最少可为0
移动规则
每次只能移动位于柱子顶端的环
每次只能移动一个环
柱子位置不能移动
每根柱子最多套5层环
最终目的是
3个黄色环套在黄色柱子上
3个蓝色环套在蓝色柱子上
3个灰色环套在红色柱子上
我只会c汉诺塔的
#include<stdio.h>
#include<stdlib.h>
static int cnt = 0;
void printHNT(char A, char B,int n) {
printf("第%d次移动:移动'%d'从%c -> %c\n", ++cnt, n, A, B);
}
void HanNuoTa(char A, char B, char C, int n) {
if (n == 1) {
printHNT(A, C, 1);//设置递归打印的开始,和递归结束的条件
return;
}
HanNuoTa(A, C, B, n - 1);//大于1的话,让B作为缓冲点,并在此函数内递归2^(n-1)次
printHNT(A, C, n);//递归完后回到主线程递归的交接点上,让最后一个环移动到C上
HanNuoTa(B, A, C, n - 1);//交换A和B立场,让B里的n-1个环进行2^(n-1)次递归
}
int main() {
char A = 'A', B = 'B', C = 'C';
int n;
printf("输入环的数目:");
scanf("%d", &n);
HanNuoTa(A, B, C, n);
return 0;
}
运行结果
|
|