递归问题
来源:互联网 发布:淘宝国外代购是真的吗 编辑:程序博客网 时间:2024/06/11 05:01
1、汉诺塔问题
问题描述:1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.在第1根柱子上的盘子是a[1],a[2],...,a[n]. a[1]=n,a[2]=n-1,...,a[n]=1.即a[1]是最下面的盘子.把n个盘子移动到第3根柱子.每次只能移动1个盘子,且大盘不能放在小盘上.问第m次移动的是哪一个盘子,从哪根柱子移到哪根柱子.例如:n=3,m=2. 回答是 :2 1 2,即移动的是2号盘,从第1根柱子移动到第2根柱子 。Input第1行是整数T,表示有T组数据,下面有T行,每行2个整数n (1 ≤ n ≤ 63) ,m≤ 2^n-1 Output输出第m次移动的盘子号数和柱子的号数。
例如:Input:n=3,m=2;Output:2 1 2
Input:n=4,m=5;Output:1 3 1
#include <iostream>
using namespace std;
#define MAXCHAR 256
void hanoi(int n,int m,char one,char two,char three,char *output)
{
static int count=0;
if(n==1)
{
count++;
if(count==m)
{
output[0]=one;
output[1]=three;
output[2]='1';
}
}
else
{
hanoi(n-1,m,one,three,two,output);
count++;
if(count==m)
{
output[0]=one;
output[1]=three;
itoa(n,output+2,10);
}
hanoi(n-1,m,two,one,three,output);
}
}
int main()
{
int n=3,m=2;
char output[MAXCHAR]={0};
hanoi(n,m,'1','2','3',output);
cout<<output+2<<" "<<output[0]<<" "<<output[1]<<endl;
system("pause");
return 0;
}
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题
- 递归问题,汉诺塔问题
- 递归的问题
- 递归求排列问题
- 递归的问题
- 递归算法 背包问题
- 背包问题(递归)
- 背包问题,递归解法
- Effective C++学习笔记(条款1-34)
- C++的函数重载
- android语音识别之科大讯飞语音API的使用
- cocos2d-x 给函数接口生命周期添加检测函数,用于调试程序时检测错误。
- JAVA第十七弹(浅谈泛型)
- 递归问题
- java ssl 网络连接报:java.net.PlainSocketImpl.connect(PlainSocketImpl.java:227)
- js 时间函数应用。加 减 比较 格式转换
- LZOP解压查看文件小trick
- something about twitter
- Java 加密算法
- 让Android程序获得系统的权限,实现关机重启,静默安装等功能
- fprintf的用法
- 使用mp4v2将aac音频h264视频数据封装成mp4开发心得