汉诺塔问题

用函数计算Hanoi塔步骤:

# include <stdio.h>
#include <stdlib.h>
int main() {
 void step(int o, char x,char y,char z);
 long long int st(int a);
 int t;
 printf("输入座数:");
 scanf("%d", &t);
 step(t,'A','B','C');
 printf("一共%llu步\n", st(t));//64位整型
 system("pause");
 return 0;
}
void step(int s,char x,char y,char z) {
 void pt(char a, char b);
 if (s <= 0) printf("数据错误");
 else if (s == 1) {
 pt(x, z);
 }
 else {
 step(s - 1,x,z,y);
 pt(x, z);
 step(s - 1,y,x,z);
 }
}
void pt(char a, char b) {
 printf("%c-->%c\n", a, b);
}
long long int st(int a) {
 long long int c;
 if (a <= 0) { printf("error!"); }
 else {
 if (a == 1) return 1;
 else c = 2 * st(a - 1) + 1;
 return c;
 }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 汉诺塔是指这个: 目标是要把所有的盘子从最左边(柱子A)移动到最右边(柱子C),条件是 1)每次只能移动一个盘子 ...
    mouse33333阅读 3,093评论 7 8
  • 文章也同时在个人博客 http://kimihe.com/[http://kimihe.com/2016/12/2...
    QihuaZhou阅读 2,534评论 0 2
  • 【题目】 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移...
    CSDN学院阅读 785评论 0 0
  • 只有接纳才能真正解脱,只有接纳自己的不接纳才能真的平静。阅读,成长才能带领你穿过瓶颈,所有玩乐,疯狂沉迷都无法满足...
    黄_王十二阅读 182评论 0 1
  • 前段时间找了一份国贸的工作,每天上班要先坐公交到劲松再换地铁。 公交劲松站下车的地方旁边有一家小副食店。 ...
    暴躁青年阅读 521评论 1 1

友情链接更多精彩内容