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. 3/21 Django框架 模板路径及模板过滤器 1.模板路径查找

    3/21 Django框架 模板路径及模板过滤器 1.模板路径查找 先找settings.py里的TEMPLATES列表下的DIRS路径.如果APP_DIRS为True,还会到注册了的APP文件夹下依 ...

  2. SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  3. opencv之SURF图像匹配

    1.概述 前面介绍模板匹配的时候已经提到模板匹配时一种基于灰度的匹配方法,而基于特征的匹配方法有FAST.SIFT.SURF等.上面两篇文章已经介绍过使用Surf算法进行特征点检測以及使用暴力匹配(B ...

  4. HDU1203 I NEED A OFFER! 【贪心】

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. Lamp(linux+apache+mysql+php)环境搭建

    Lamp(linux+apache+mysql+php)环境搭建 .安装apache2:sudo apt-get installapache2 安装完毕后.执行例如以下命令重新启动apache:sud ...

  6. HDU 5389 Zero Escape (MUT#8 dp优化)

    [题目链接]:pid=5389">click here~~ [题目大意]: 题意: 给出n个人的id,有两个门,每一个门有一个标号,我们记作a和b,如今我们要将n个人分成两组,进入两个 ...

  7. 为什么选择Solr?

    在大型的SQL数据库上很难执行高速的查询有Solr是Apache 下的一个开源项目,使用Java基于Lucene开发的全文检索服务: 它是一个独立的企业级搜索应用服务器,它对外提供类似于Web-ser ...

  8. Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用

    三.事务处理 Redis的事务处理比较简单.只能保证client发起的事务中的命令可以连续的执行,而且不会插入其他的client命令,当一个client在连接 中发出multi命令时,这个连接就进入一 ...

  9. 对于学习apache软件基金会顶级项目源码的一点思路(转)

    ASF的开源项目,为软件行业贡献了太多好的产品和软件思维.学习ASF的项目源码能很大的提升自身的能力.程序运行在服务器上的流程:执行启动脚本(start.sh) -> 指向程序的主方法 -> ...

  10. SQLite基础学习

    SQLite是一款轻量级数据库,集成于android中,以下从分享一下自己学习的. 在查阅资料时有一些好的说明就直接用了: 主要的curd语句 以下SQL语句获取5条记录,跳过前面3条记录 selec ...