汉诺塔 X(二分法)
来源:互联网 发布:js实现div逆时针旋转 编辑:程序博客网 时间:2024/06/07 04:36
http://acm.hdu.edu.cn/showproblem.php?pid=2511
汉诺塔 X
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 640 Accepted Submission(s): 383
Problem Description
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次移动的盘子号数和柱子的号数.
Sample Input
43 24 539 18325193794263 3074457345618258570
Sample Output
2 1 21 3 12 2 32 2 3
#include <cstdio>__int64 s[70];int flag;void fun(char a,char b,char c,int n,__int64 m){ if(flag)return; if(m>s[n]) fun(b,a,c,n-1,m-s[n]);//先将a号盘子的前n-1个盘子全移到b上,在将n号盘子移到c,将ba调换位置 else if(m==s[n]){flag=1;printf("%d %c %c\n",n,a,c);} else fun(a,c,b,n-1,m);//在n-1个盘子中是哪个从哪移到哪}int main(){ s[1]=1; for(int i=2;i<=64;i++) s[i]=s[i-1]*2; int t; scanf("%d",&t); while(t--){ __int64 n,m; scanf("%I64d%I64d",&n,&m); flag=0; fun('1','2','3',n,m);//fun的功能是在n个盘子下第m次是哪个盘子从哪移到哪; } return 0;}
0 0
- 汉诺塔 X(二分法)
- x的n次方(二分法)
- (二分法)求X的N次方
- Sqrt(x) 二分法
- 二分法 Pow(x, n)
- lettcode:二分法sqrt(x)
- leetcode 二分法 Pow(x, n)
- Sqrt(x) ,二分法,牛顿迭代法
- LeetCode--Pow(x,n)二分法
- 二分法快速计算x的n次幂(递归和循环实现)
- LeetCode-50-Pow(x, n)( 二分法)-Medium
- LeetCode-69-Sqrt(x)(二分法)-Medium
- 习题- 二分法 求x的n次方
- 二分法(摘)
- 二分法(折半查找)
- 求解方程(二分法)
- 二分法(数组形式)
- Monthly Expense(二分法)
- eclipse启动tomcat服务几种错误总结
- ios总结(多页面跳转:)
- 怎样充分利用失败
- 网页资源下载器
- LeetCode || Partition List
- 汉诺塔 X(二分法)
- Java通过poi读取word,excel,ppt文件中文本(excel,ppt部分)
- flvstreamer
- WPF窗体 WPF窗体调用函数
- hdu2544
- 关于ORACLE数据库服务器SWAP该设置成多大的建议值
- MongoDB在SuperMap产品中的使用
- Softmax回归
- HDOJ 1509 Windows Message Queue (简单优先队列 )