HDU 2175 汉诺塔IX
来源:互联网 发布:淘宝双十一全民疯抢 编辑:程序博客网 时间:2024/05/16 08:00
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次移动的是那一个盘子.
在第1根柱子上的盘子是a[1],a[2],...,a[n]. a[1]=n,a[2]=n-1,...,a[n]=1.即a[1]是最下
面的盘子.把n个盘子移动到第3根柱子.每次只能移动1个盘子,且大盘不能放在小盘上.
问第m次移动的是那一个盘子.
Input
每行2个整数n (1 ≤ n ≤ 63) ,m≤ 2^n-1.n=m=0退出
Output
输出第m次移动的盘子的号数.
Sample Input
63 163 20 0
Sample Output
12
分析:参考他人的讲解,结合自己的思考,搞明白了。
首先在纸上模拟过程的时候可以发现这个规律:
对于第一个盘子从第一次2^0开始,后面每次要等一个盘子移动完它就移动,也就是说1号盘子隔一个移动一次,即1,3,5,7...是它移动的顺序
对于第二个盘子从第二次2^1开始,需要等比它号码高的一个盘子移动后还要等比它号码低的盘子全部移动后才能移动,即2号要等1号移动完,需要等2^1+2^1=2^2次
即2号盘子每次移动的序号是2,6,10,14..
对于第3个盘子从2^2开始,同样需要等比它号码高的一个盘子移动后还要等比它号码低的盘子全部移动完后才能移动,即3号要等1,2号移动完才行,需要等2^1+2^2+2^1=2^3次
即3号盘子每次移动的序号是4,12,20...
....
后面同样的规律
#include <stdio.h>int main(){__int64 m;int i,n;while(~scanf("%d%lld",&n,&m)&&n != 0&&m != 0){for (i = 1; i <= n; i ++){if (m%2)break;m /= 2;}printf("%d\n",i);}return 0;}
1 0
- hdu 2175 汉诺塔IX
- HDU 2175 汉诺塔IX
- HDU 2175 汉诺塔IX
- Hdu 2175 汉诺塔IX 递推
- hdu 2175 汉诺塔IX(找规律)
- HDU 1997、2184、2175、2511 汉诺塔VII、VIII、IX、X
- 汉诺塔IX
- 汉诺塔IX
- 杭电--2175--汉诺塔IX--数学题
- HDU2175:汉诺塔IX
- hdu2175汉诺塔IX
- 汉诺塔ix C语言
- Hdu2175汉诺塔IX
- [汉诺塔][第二阶段-汉诺塔入门][HDOJ-2175]汉诺塔IX
- 汉若塔系列续:汉诺塔VIII、汉诺塔IX、汉诺塔X。
- oracle-hx-ix使用
- 《战拖有术》读书笔记(IX)
- IX. Spring Boot应用
- C语言学习:__stdcall、__cdcel和__fastcall三者的区别
- leetcode:Expression Add Operators
- 命令模式
- easyui多行选择值的处理
- 《数据结构》 单链表常用操作代码集合
- HDU 2175 汉诺塔IX
- 通过DBCA为数据库添加EM选件,成功登陆OEM
- extjs
- 【Git】记录一些Git常用命令
- VMware 安装 CentOS 安装 CentOS-6.5-i386-minimal.iso 版本
- poj 1050 To the Max(最大子矩阵和)
- uvc camera MTK平台调试总结
- SQLite Expert查看float数据
- 第四周项目1-求最大公约数(1)