四塔问题.docx
- 文档编号:3743595
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:7
- 大小:16.30KB
四塔问题.docx
《四塔问题.docx》由会员分享,可在线阅读,更多相关《四塔问题.docx(7页珍藏版)》请在冰豆网上搜索。
四塔问题
四塔问题
“汉诺塔”,是一个众所周知的古老游戏。
现在我们把问题稍微改变一下:
如果一共有4根柱子,而不是3根,那么至少需要移动盘子多少次,才能把所有的盘子从第1根柱子移动到第4根柱子上呢?
为了编程方便,您只需要输出这个结果mod10000的值。
Input
该题含有多组测试数据,每组一个正整数n。
(0 Output 一个正整数,表示把n个盘子从第1根柱子移动到第4根柱子需要的最少移动次数mod10000的值。 SampleInput 15 SampleOutput 129 来源: 最新评论发表评论 您尚未登陆本站,不能发表评论,请登陆 评论人: liophie 发布时间: 2010-4-2815: 52: 50 挺有意思啊,只是计算步数... 评论人: lvzhipu 发布时间: 2009-9-1515: 01: 49 #include using namespace std; void move(char getone,char putone) { cout< } void hanoi(int n,char one,char two,char three) { void move(char getone,char putone); if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } int main() { void hanoi(int n,char one,char two,char three); int m; cout<<"enter the number of diskes: "; cin>>m; cout<<"the steps to moving"< "< hanoi(m,'A','B','C'); } 评论人: lvzhipu 发布时间: 2009-9-1515: 01: 42 #include using namespace std; void move(char getone,char putone) { cout< } void hanoi(int n,char one,char two,char three) { void move(char getone,char putone); if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } int main() { void hanoi(int n,char one,char two,char three); int m; cout<<"enter the number of diskes: "; cin>>m; cout<<"the steps to moving"< "< hanoi(m,'A','B','C'); } 评论人: imjohnzj 发布时间: 2008-10-1916: 30: 03 和刚才一样的代码,写紧凑点: unsigned long int hanno4(unsigned int lv){ unsigned long int result=0,offset=1; int count=0,time=1,cur=0; if(lv==0)return 0; while(lv--){ result+=offset;cur++; if(cur==time){time++;cur=0;offset+=offset;} result%=10000;offset%=10000; } return result; } 评论人: imjohnzj 发布时间: 2008-10-1916: 27: 14 只是为了求移动的步数嘛,不用真的一步步去移的啦。 unsigned long int hanno4(unsigned int lv){ unsigned long int result=0,offset=1; int count=0,time=1,cur=0; if(lv == 0)return 0; while(lv --){ result += offset; cur ++; if(cur==time){ time ++; cur = 0; offset += offset; } result %= 10000; offset %= 10000; } return result; } 评论人: woshicainiao 发布时间: 2008-5-220: 42: 27 /*********************** 令 Kn 和i<=n i=1 Kn是最大整数 1号桩下面Kn个固定,上面n-Kn个移到2号, 再把1号下面Kn个通过3移到4号 再把2号的n-Kn移动到4号 T(n)=2T(n-Kn)+2^Kn-1 令Rn=n-Kn*(Kn+1)/2 则T(n)=(Kn+Rn-1)*2^Kn+1 ************************/ static Number=0; #include void HannuoTower_3(int,char,char,char); void HannuoTower_4(int,char,char,char,char); void main() { int n; cin>>n; char A='A'; char B='B'; char C='C'; char D='D'; HannuoTower_4(n,A,B,C,D); cout<<"**********************"< cout< } void HannuoTower_3(int n,char A,char B,char C) { Number++; if(n==1) cout<"< else { HannuoTower_3(n-1,A,C,B); cout<"< HannuoTower_3(n-1,B,A,C); } } void HannuoTower_4(int n,char A,char B,char C,char D) { if(n==1) { Number++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)