Hanoi(汉诺)塔问题(C实现)
2016-06-05 10:57
363 查看
650) this.width=650;" title="QQ截图20151018170640.png" src="http://s3.51cto.com/wyfs02/M00/74/97/wKioL1YjYV2A0PyzAABFqBoJfWw783.jpg" alt="wKioL1YjYV2A0PyzAABFqBoJfWw783.jpg" />
Hanoi(汉诺)塔问题。这是一个经典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘子,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用C座,给出移动过程。
650) this.width=650;" title="QQ截图20151018173435.png" src="http://s3.51cto.com/wyfs02/M00/74/97/wKioL1YjZ-GytnaqAACPQx58CHw726.jpg" alt="wKioL1YjZ-GytnaqAACPQx58CHw726.jpg" />
Hanoi(汉诺)塔问题。这是一个经典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘子,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用C座,给出移动过程。
#include<stdio.h> #include<stdlib.h> void move(char ch1,char ch2) { printf("%c-->%c\n", ch1,ch2); } void hanoi_tower(int num,char c1,char c2,char c3) { if (1 == num) move(c1, c3); else { hanoi_tower(num - 1, c1, c3, c2); move(c1, c3); hanoi_tower(num - 1, c2, c1, c3); } } int main() { int N; printf("请输入要移动的盘子的数量\n"); scanf_s("%d", &N); printf("移动的步骤为:\n"); hanoi_tower(N, 'A', 'B', 'C'); system("pause"); return 0; }运行结果:
650) this.width=650;" title="QQ截图20151018173435.png" src="http://s3.51cto.com/wyfs02/M00/74/97/wKioL1YjZ-GytnaqAACPQx58CHw726.jpg" alt="wKioL1YjZ-GytnaqAACPQx58CHw726.jpg" />
相关文章推荐
- 笔试面试成对出现的一组数,只有一个或两个只出现一次的数字,找到它们。
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 通讯录小程序(C/C++)C语言练习小程序
- 最全顺序表函数(打印,初始化,后插,后删,前插,前删……)
- #pragma once和#ifndef的区别
- C/C++,数据结构实现两个链表的合并(尾插法建立单链表,求链表长度,直接插入排序)
- C/C++,数据结构单链表(采用C++&quot;引用&quot;方法)(寻找节点、在某处插入结点、删除某位置结点)
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点
- 笔试面试单链表相关(2)在任意位置前插入结点、逆置链表
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点
- C/C++,数据结构单链表实现约瑟夫环
- 笔试,面试,C/C++,数据结构单链表排序(改进冒泡排序)
- 笔试,面试,C/C++,判断单链表是否带环?若带环,求环长度,求环入口点(两种方法)
- <笔试><面试>C/C++单链表相关(4)判断两链表是否相交,求交点(链表不带环/可能带环)
- <笔试><面试>C/C++单链表(最综合)最全工程从建立到相关函数实现
- 反编译的工具
- C/C++为什么要短路求值?
- 剑值offer(4)-重建二叉树
- ASP.Net Web API 的参数绑定[翻译]