• 汉诺塔IX


    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=76447#problem/E

                       汉诺塔IX Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    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个小时? 后悔没有坚持,后悔没有把想到的都想到,后悔,存在~
     
    代码超级简单
    #include<stdio.h>

    int main()
    {
        long long n, m, k;  // 2的63次方,超过int类型范围

        while(scanf("%lld%lld", &n, &m), n+m)
        {
            k = 1;
            while(m % 2 != 1)
            {
                k++;
                m /= 2;
            }
            printf("%lld ", k);
        }
        return 0;
    }
     
    之前推了前几个:前5个顺序应该是 1 21 3121 4121 3121 5121 3121 4121 3121 。
    看出来什么了吗没有,昨天其实都想到4放哪个柱子上的问题,由于什么,就把4按放第三个柱子上处理,5就变成了51213121312141213121,当n等于4的时候放第四个柱子上,当n等于5的时候,4放哪个柱子上都是一样,但5就不一样了。。醉了,脑子就那么一闪,就过去了。不过也不一定就能想出来。。
    让未来到来 让过去过去
  • 相关阅读:
    Bash的提示符
    小笨霖英语笔记本(5)
    什么是VLAN
    阅读笔记:双核心Opteron处理器
    小笨霖英语笔记本(4)
    搭乘CCNUMA快车
    得到tnsnames.ora文件的位置 zz
    关于64位Windows操作系统中的注册表 zz
    Temp.Misc
    HttpHandler HttpModule入门篇
  • 原文地址:https://www.cnblogs.com/Tinamei/p/4465736.html
Copyright © 2020-2023  润新知