【NOIP2007】第四题·Hanoi双塔问题

题目描述 Description

给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

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

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

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

输入描述 Input Description

为一个正整数n,表示在A柱上放有2n个圆盘。

输出描述 Output Description

仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数An

样例输入 Sample Input

2

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

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

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

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

代码:var
  a:array[1..200]of longint;
  b:array[1..10000]of integer;
  n,i,j,m:longint;
begin
  readln(n);
  a[1]:=2;
  if n<26 then begin
  for i:=2 to n do a[i]:=a[i-1]*2+2;
  writeln(a[n]);
  end
  else begin
    b[1]:=2;b[2]:=6;b[3]:=8;b[4]:=8;b[5]:=0;b[6]:=1;b[7]:=7;b[8]:=6;
    m:=8;
    for i:=26 to n do begin
      for j:=1 to m do b[j]:=b[j]*2;
      b[1]:=b[1]+2;
      for j:=1 to m do begin
        b[j+1]:=b[j]div 10+b[j+1];
        b[j]:=b[j] mod 10;
      end;
      inc(m);
    end;
    while b[m]=0 do m:=m-1;
    for i:=m downto 1 do write(b[i]);
  end;
end
时间: 2024-10-08 13:14:02

【NOIP2007】第四题·Hanoi双塔问题的相关文章

b161: NOIP2007 4.Hanoi双塔问题

zerojudge  汉诺塔?图片问度娘 b161: NOIP2007 4.Hanoi双塔问题 题目: 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存.要求: (1)每次只能移动一个圆盘: (2)A.B.C三根细柱上的圆盘都要保持上小下大的顺序: 任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An.

code第一部分:数组 第十四题 雨水问题

code第一部分:数组 第十四题 雨水问题 Given n non-negative integers representing an elevation map where the width of each bar is 1, computehow much water it is able to trap after raining.For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. 分析: 解决方案1 对于每个柱子,找到其左右两

Java-集合(没做出来)第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseL

没做出来 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello package

2014百度之星资格赛第四题

Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2911    Accepted Submission(s): 1007 Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一

14年百度之星资格赛第四题

Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 519 Accepted Submission(s): 174 Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下

第二题、第三题、第四题

1.以编程方式操作 HttpCachePolicy 类. HttpCachePolicy.SetExpires HttpCachePolicy.SetCacheability |NoCache|Private|Public|Server|ServerAndNoCache |ServerAndPrivate 2<%@ OutputCache Duration="60" VaryByParam="None" %>Duration 和 VaryByParam

hiho_offer收割18_题解报告_差第四题

I.求逆元欧几里得方法 II.模拟细心+耐心 *本人感悟:自己的错误在于:对于这道模拟题没有耐心静下来一字一字看题,一行一行调错,一步一步调试,我要引以为戒. III.dpf[i][j][k]=max(f[i-1][j][k],min(f[i-1][t][k-1])+value[i][k])t=0,1,-,801 i为第i个曲子(长度为3)j为至今已进行j次的和弦改变(j<=c(c为允许和弦改变的最多次数))k为第k种和弦的方法value[i][k]为用对第i个曲子用第k个和弦的不和谐值 本人想

LeetCode第四题,Add Two Numbers

题目原文: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6

经典算法题每日演练——第二十四题 梳排序

原文:经典算法题每日演练--第二十四题 梳排序 这篇再看看一个经典的排序,梳排序,为什么取名为梳,可能每个梳都有自己的gap吧,大梳子gap大一点,小梳子gap小一点. 上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化. 冒泡排序上我们的选择是相邻的两个数做比较,就是他们的gap为1,其实梳排序提出了不同的观点,如果将这里的gap设置为一定的大小, 效率反而必gap=1要高效的多. 下面我们看看具体思想,梳排序有这样一个1.