四柱汉诺塔
来源:互联网 发布:ts合并软件 安卓版 编辑:程序博客网 时间:2024/06/05 09:10
2014年广州市信息学尖子选拔赛 第一题
Time Limit:30000MS Memory Limit:256000K
Total Submit:7 Accepted:4
Case Time Limit:1000MS
Description
你对经典的hanoi塔问题一定已经很熟悉了。有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上?
现在我们来将hanoi塔扩展一下,由三根柱子扩展到四根柱子,其余规则不变。例如,3个圆盘,四根柱子A到D,初始时圆盘都A柱上,我们用五步就可以将圆盘都挪到D柱上:
第一步:将圆盘1从A挪到B;
第二步:将圆盘2从A挪到C;
第三步:将圆盘3从A挪到D;
第四步:将圆盘2从C挪到D;
第五步:将圆盘1从B挪到D。
你的任务是写一个程序求解四柱子hanoi塔问题最少要多少步可以解决。
Input
输入只有一行,为一个正整数n。(1<=n<=1000)
Output
输出为一个正整数,代表n盘四柱子hanoi塔问题最少要多少步可以解决。
Sample Input
3
Sample Output
5
题解:我们通过求出f[i]的值,发现了一个新的规律:
f[1] : 0 +2^0=1;
f[2] : 1 +2^1=3;
f[3] : 3 +2^1=5;
f[4] : 5 +2^2=9;
f[5] : 9 +2^2=13;
f[6] : 13+2^2=17;
f[7] : 17+2^3=25;
f[8] : 25+2^3=33;
f[9] : 33+2^3=41;
f10] : 41+2^3=49;
f[11]: 49+2^4=65;
易得出规律直接模拟即可(本题要高精)
var n,ans,co,num,add,i:longint;begin readln(n); co:=2;num:=2;add:=2; ans:=1; for i:=2 to n do begin ans:=ans+add; if co>1 then dec(co) else begin add:=add*2; inc(num); co:=num; end; end; writeln(ans);end.
- 四柱汉诺塔
- 四柱汉诺塔
- 四柱汉诺塔
- 四柱汉诺塔
- 三、四柱汉诺塔问题
- uva 10254(四柱汉诺塔)
- hdu 1207 四柱汉诺塔
- hdu 1207 汉诺塔II (四柱汉诺塔)
- 三、四柱汉诺塔最小步数
- POJ_1958_Strange Towers of Hanoi(四柱汉诺塔)
- hdu1207 优化后的,四柱汉诺塔
- 递归 —— 三柱汉诺塔和四柱汉诺塔
- HDU 1207 汉诺塔II(四柱汉诺塔)
- SSL1662 家庭问题(并查集)
- html总结
- dataframe 使用心得记录
- JRE 与JDK的区别
- C#中的协变性与逆变性
- 四柱汉诺塔
- 原生DOM接口学习之实现表格的排序
- 字符编码:ASCII,Unicode和UTF-8
- JavaScript数组forEach循环
- Java回调函数的一种理解
- flasky-sqlalchemy数据库
- 两种好用的占位图
- 使用1角分高程数据为OpenStreetMap服务器添加海洋等深线
- GDB-TUI