汉诺塔IX

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 775    Accepted Submission(s): 462

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次移动的是那一个盘子.
 
Input
每行2个整数n (1 ≤ n ≤ 63) ,m≤ 2^n-1.n=m=0退出
 
Output
输出第m次移动的盘子的号数.
 
Sample Input
63 1
63 2
0 0
 
Sample Output
1
2
 


 思路是先求最少能全然移动的前第几个盘,然后推断是否刚好拿完,假设刚好拿完那最后一个一定是 1;假设没拿完,那下一个就是这次拿完的下一个,所以推断是不是刚好多一个。假设多一个最后一个就是它,否则把剩下的数量-1(由于要把一个大的拿过来,不明确的自己想一下);然后再反复上面的操作

#include<iostream>

#include<cstring>

using namespace std;

int n,lstn;

long long m,ans,num[10000];

long long  mypow(int x)

{

  if(num[x]) return num[x];

  if(x==0) return 1;

  num[x]=2*mypow(x-1);

 return num[x];

}





long long test(long long mm){

      lstn=1;

      while(mypow(lstn)-1<mm){

        lstn++;

      }

     

    if(mypow(lstn)-1==mm) return 0;

    else if(mypow(lstn-1)==mm)  return -1;

    else return  mm-mypow(lstn-1);

}





int main(){

    memset(num,0,sizeof(num));

 while(cin>>n>>m&&n){

    ans= test(m);

    while(ans>0){

     ans=test(ans);

    }

    if(ans==0) cout<<1<<endl;

    else cout<<lstn<<endl;





 }

}

hdu2175汉诺塔IX的更多相关文章

  1. 汉诺塔IX

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=76447#problem/E 汉诺塔IX Time Limit:1000MS     Me ...

  2. 汉若塔系列续:汉诺塔VIII、汉诺塔IX、汉诺塔X。

    汉诺塔VIII,在经典汉若塔问题上,问n个盘子的情况下,移动m次以后,是什么状态.(与第七代互为逆命题) 我的思路:本质还是dfs,但是用m的值来指引方向,每搜一层确定第i个盘子在哪个塔,o(n)的算 ...

  3. HDOJ-2175 汉诺塔IX

    题目大意:基于汉诺塔原型,第一根柱子上有n个盘子,从上至下编号从1依次递增至n.在最佳移动方案中,第m次所移动的盘子的编号. 解题思路:模拟必然是会超时的.但根据汉诺塔的递归原理,容易发现,对于n阶汉 ...

  4. HDU 2175 汉诺塔IX (递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2175 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根柱子上.大盘不能放在小盘上.  ...

  5. HDU 2175 汉诺塔IX

    http://acm.hdu.edu.cn/showproblem.php?pid=2175 Problem Description 1,2,...,n表示n个盘子.数字大盘子就大.n个盘子放在第1根 ...

  6. HDU汉诺塔系列

    这几天刷了杭电的汉诺塔一套,来写写题解. HDU1207 汉诺塔II HDU1995 汉诺塔V HDU1996 汉诺塔VI HDU1997 汉诺塔VII HDU2064 汉诺塔III HDU2077  ...

  7. HDU 汉诺塔系列

    做了这一系列题,表示对汉诺塔与这一系列递推理解加深了 经典汉诺塔:1,2,...,n表示n个盘子,数字大盘子就大,n个盘子放在第1根柱子上,按照从上到下 从小到大的顺序排放,过程中每次大盘都不能放在小 ...

  8. bzoj1019 [SHOI2008]汉诺塔

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 638[Submit][Status] ...

  9. [SHOI2008]汉诺塔

    Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上, 大的在下面,小的在上面,形成了一个塔状的锥形体. 对汉诺塔的一次合法的 ...

随机推荐

  1. 配置BeanUtils包,同时也是对导入第三包的步骤说明

    BeanUtils是由Apache公司开发的针对操作JavaBean的工具包. 对于JavaBean,简单的来说,就是要有一个空参的构造器和对属性的getXXX方法和setXXX方法. 在由JDK提供 ...

  2. Webserver管理系列:5、利用MSConfig排查木马

    木马程序最喜欢去的地方有两个一个是服务里面,一个是启动里面.利用msconfig我们能够高速的找到可疑程序. 在命令行中输入msconfig回车 选择服务项: 这里面的服务有非常多我们非常难排查,我告 ...

  3. ERWin 7.1 和7.2 的官方FTP下载地址

    ERWin 7.1 下载地址: ftp://ftp.ca.com/CAproducts/erwin/ServicePacks/AFEDM71sp2-b1303.exe ERWin 7.2 下载地址: ...

  4. 将Ojective-C代码移植转换为Swift代码

    相比于Objective-C,Swift语言更加简练.有时我们需要把原来写的一些Objective-C代码转换成Swift,下面总结了各种常见的情况. 1,构造函数的迁移 Objective-C为: ...

  5. javascript (四) 改变html样式

    <h1 id="domo"> this is testing test</h1> <script> function changecolor() ...

  6. centos 安装 redis3.2.0 集群

    这里创建6个redis节点,其中三个为主节点,三个为从节点. redis和端口对应关系: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 从: 127.0.0 ...

  7. asp.net(C#)之NPOI&quot;操作Excel

    1.首先到网上下载"NPOI.DLL".引用. 2.新建一个操作类"ExcelHelper.cs": using System.Collections.Gene ...

  8. HDU 1535 Invitation Cards (POJ 1511)

    两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...

  9. C语言char s[] 和 char *s的差别

    C语言char s[] 和 char *s的差别,以下这个回答解说的非常清晰. The difference here is that char *s = "Hello world" ...

  10. 理解 Python 中的线程

    原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...