Time Limit: 10 second

Memory Limit: 2 MB

问题描述

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

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

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

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

Input

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

Output

输出仅一行,包含一个正整数,为完成上述任务所需的最少移动次数An。(最后用换行结束)

Sample Input

1

Sample Output

2

Sample Input2

2

Sample Output2

6

【题解】

先不考虑有相同圆盘的情况。

即n个不同的圆盘。

则需要把n-1个圆盘从a->b,然后把a上剩余的一个圆盘从a->c。然后把b上的n-1个圆盘从b->c。

这里的两步:把n-1个圆盘从a->c,和n-1个圆盘从b->c.所需要的步骤数。实际上就是把n-1个圆盘从a移动到c的步骤数*2,因为是等价的。从a->b和从b->c移动的圆盘个数都是一样的,这样。

然后还要多一步就是把a上的一个圆盘放到c。

所以得到递推式。(没有相同的圆盘。然后是n个不是2*n个的递推式)

An表示把n个圆盘从a到c的步骤数。

An=A(n-1)*2+1;

然后玩一下数学游戏。

An=A(n-1)*2+2-1;

An+1=A(n-1)*2+2;

An+1=2(A(n-1)+1)

令Bn = (An+1);

则Bn是一个等比数列。

A1只有把1个圆盘从a移到c,步骤为1

B1=A1+1 = 2;

所以Bn=2^n

然后An=2^n-1;

现在考虑有重复圆盘的情况。

其实只要乘上2就可以了。。

比如n==1.

A上有两个相同的圆盘。那就全都拿到C就好了。

只不过要多移动一次了而已。

然后每种圆盘都要多移动一次

设Dn为2*n个圆盘(n种)要从a移动到c的步骤数。

Dn=2*An=2^(n+1)-2;

然后n可能很大。要用高精度。

写一下高精度乘法即可。

【代码】

//2^(n+1)-2;
#include <cstdio> int n, a[1000] = { 0 };//a数组用来存高精度的各个位上的数字。 void input_data()
{
scanf("%d", &n);
} void get_ans()
{
a[0] = 1;
a[1] = 1;//2^0 == 1;
for (int i = 1; i <= n + 1; i++) //然后乘上n+1个2.
{
int x = 0;
for (int j = 1; j <= a[0]; j++)//把每一位都乘上2.
{
a[j] = a[j] * 2 + x; //边乘边进位。
x = a[j] / 10;
a[j] = a[j] % 10;
}
while (x > 0) //可能要扩展位数。
{
a[0]++;
a[a[0]] = x % 10;
x = x / 10;
}
}
a[1] -= 2;//直接减去2就好。不会出现要退位的情况。
//因为2的x次方除了2的0次方之外。其他的个位数字上的数字都大于等于2.这样。
} void output_ans()
{
for (int i = a[0]; i >= 1; i--) //倒序输出所有位上的数字。
printf("%d", a[i]);
} int main()
{
input_data();
get_ans();
output_ans();
return 0;
}

【9107】Hanoi双塔问题(NOIP2007)的更多相关文章

  1. b161: NOIP2007 4.Hanoi双塔问题

    zerojudge  汉诺塔?图片问度娘 b161: NOIP2007 4.Hanoi双塔问题 题目: 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都 ...

  2. noip普及组2007 Hanoi双塔问题

    Hanoi双塔问题 描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的.现要将这些圆盘移到C柱上,在移动 ...

  3. Hanoi双塔问题(递推)

    Hanoi双塔问题 时间限制: 1 Sec  内存限制: 128 MB提交: 10  解决: 4[提交][状态][讨论版][命题人:外部导入] 题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2 ...

  4. 洛谷 P1096 Hanoi双塔问题

    P1096 Hanoi双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情 ...

  5. [高精度]P1096 Hanoi 双塔问题

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

  6. 【NOIP2007】Hanoi双塔问题

    题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现要将这些圆盘移到C柱上 ...

  7. hanoi双塔

    汉诺塔,经典的递归. 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK.有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子.现在请你编 ...

  8. 洛谷——P1096 Hanoi双塔问题

    https://www.luogu.org/problem/show?pid=1096 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个 ...

  9. LFYZ-OJ ID: 1011 hanoi双塔问题

    思路 虽然每种大小盘子数量为2,但对总步数的影响只是一个简单的倍数关系而已,递推关系很容易可以总结出来:an=an-1+2+an-1=2(an-1+1),n=1时,a1=2.故递推的过程就是从a1=2 ...

随机推荐

  1. POJ 1082 Calendar Game

    Adam and Eve enter this year's ACM International Collegiate Programming Contest. Last night, they pl ...

  2. 图片拖拽缩放功能:兼容Chrome、Firefox、IE8+

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. php学习笔记6

    PHP 字符串变量 PHP 中的字符串变量 字符串变量用于包含有字符的值. 在创建字符串之后,我们就可以对它进行操作了.您可以直接在函数中使用字符串,或者把它存储在变量中. 在下面的实例中,我们创建一 ...

  4. 《鸟哥的Linux私房菜-基础学习篇(第三版)》(四)

    第3章 主机规划与磁盘分区        1. Linux与硬件的搭配        首先谈了认识计算机的硬件配置. 然后谈了选择与Linux搭配的主机配置. 在Linuxserver中,内存的重要性 ...

  5. leetCode解题报告5道题(十)

    题目一:Valid Number Validate if a given string is numeric. Some examples: "0" => true &quo ...

  6. windows 批处理脚本(batch scripting)

    Guide to Windows Batch Scripting DOS 不需对变量事先声明.未声明或未初始化变量是一个空字符串("") 1. 变量赋值 set命令用于变量赋值.s ...

  7. 1.1 Introduction中 Kafka for Stream Processing官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka for Stream Processing kafka的流处理 It i ...

  8. 洛谷 P1230 智力大冲浪

    洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?! ...

  9. STL之vector容器的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载. 实现vector容器的思路等同于实现一个动态数组,以下我们參照源代码的相关资料,给出一个vector容器的大致框架,仅仅有声明,没给出详细的实现. ...

  10. 【原创】基于pyautogui进行自动化测试

    前期准备: python3.6 pyautogui pywinauto 以下代码实现内容: 1.打开记事本 2.记事本中输入This is a test 3.保存内容 4.退出进程 import py ...