zoukankan      html  css  js  c++  java
  • 洛谷——P1096 Hanoi双塔问题

    https://www.luogu.org/problem/show?pid=1096

    题目描述

    给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。

    现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

    (1)每次只能移动一个圆盘;

    (2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;

    任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。

    输入输出格式

    输入格式:

    输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。

    输出格式:

    输出文件hanoi.out仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数An。

    输入输出样例

    输入样例#1:
    【输入样例1】
    1
    【输入样例2】
    2
    输出样例#1:
    【输出样例1】
    2
    【输出样例2】
    6

    说明

    【限制】

    对于50%的数据,1<=n<=25

    对于100%的数据,1<=n<=200

    【提示】

    设法建立An与An-1的递推关系式。

     1 #include <algorithm>
     2 #include <cstdio>
     3 
     4 using namespace std;
     5 
     6 int n,num[233],len;
     7 
     8 void cheng()
     9 {
    10     for(int i=1,x=0;i<=len;i++)
    11     {
    12         num[i]=(num[i]<<1)+x;
    13         if(num[i]>9)
    14         {
    15             x=num[i]/10;
    16             num[i]%=10;
    17             len=max(len,i+1);
    18         }
    19         else x=0;
    20     }
    21 }
    22 
    23 int main()
    24 {
    25     scanf("%d",&n);
    26     len=1; num[1]=1;
    27     for(int i=1;i<=n;i++) cheng();
    28     num[1]-=1; 
    29     for(int i=1;i<=len;i++)
    30         if(num[i]<0) num[i]++,num[i+1]--;
    31     cheng();
    32     for(int i=len;i;i--) printf("%d",num[i]);
    33     return 0;
    34 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    PHP联接MySQL
    PHP分页及原理
    两种ajax的方法
    Mysql 数据库 操作语句
    HTTP状态码对照表 HTTP response codes
    HTTP请求中POST与GET的区别
    Django模板导入和替换、以及对数据库的增加、查看
    Django模板(filter过滤器{{ }}与tag标签{% %}应用)
    Django视图层
    Diango路由控制
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7305767.html
Copyright © 2011-2022 走看看