【9107】Hanoi双塔问题(NOIP2007)
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)的更多相关文章
- b161: NOIP2007 4.Hanoi双塔问题
zerojudge 汉诺塔?图片问度娘 b161: NOIP2007 4.Hanoi双塔问题 题目: 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都 ...
- noip普及组2007 Hanoi双塔问题
Hanoi双塔问题 描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的.现要将这些圆盘移到C柱上,在移动 ...
- Hanoi双塔问题(递推)
Hanoi双塔问题 时间限制: 1 Sec 内存限制: 128 MB提交: 10 解决: 4[提交][状态][讨论版][命题人:外部导入] 题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2 ...
- 洛谷 P1096 Hanoi双塔问题
P1096 Hanoi双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情 ...
- [高精度]P1096 Hanoi 双塔问题
Hanoi 双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现 ...
- 【NOIP2007】Hanoi双塔问题
题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现要将这些圆盘移到C柱上 ...
- hanoi双塔
汉诺塔,经典的递归. 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK.有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子.现在请你编 ...
- 洛谷——P1096 Hanoi双塔问题
https://www.luogu.org/problem/show?pid=1096 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个 ...
- LFYZ-OJ ID: 1011 hanoi双塔问题
思路 虽然每种大小盘子数量为2,但对总步数的影响只是一个简单的倍数关系而已,递推关系很容易可以总结出来:an=an-1+2+an-1=2(an-1+1),n=1时,a1=2.故递推的过程就是从a1=2 ...
随机推荐
- ASP.NET MVC 4 (十一) Bundles和显示模式--asp.net mvc中 @Scripts.Render("~/bundles/jquery")是什么意思? 在布局文件中使用Scripts.Render()输出脚本包,Styles.Render()输出风格包:
ASP.NET MVC 4 (十一) Bundles和显示模式 ASP.NET MVC 4 引入的js打包压缩功能.打包压缩jquery目录下的文件,在布局文件中使用Scripts.Render()输 ...
- FineUI 页面跳转
要加 EnableAjax=false; <f:Button ID="btn1" EnableAjax="false" OnClick="btn ...
- 感谢党,软考过了。系统集成项目管理project师
人品爆发了,刚用干巴巴的日语做完2小时的设计说明,回到家一查,人品爆发了.软考竟然过了. 绝对是评卷老师给人品啊!真想请他吃顿饭. 系统集成项目管理project师 64 53 幸运飞过! 今天真是 ...
- javascript之Ajax起步
XMLHttpRequest readyState属性的值: UNSENT--0--已创建XMLHttpRequest对象. OPENED--1--已调用open方法: HEADERS_RECEIV ...
- 3lession-python编程规范
今天继续学习python,内容主要就是python编程过程中的一些规范,包括注释.换行等 1.注释 所有的注释都是以#开头,注释可以单独占有一行,也可以放到语句的末尾.因为python没有多行注释,所 ...
- java poi 向excel写入图片
import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; impo ...
- solr6.3+tomcat8报错HTTP Status 403 – Forbidden解决办法
注释掉tomcat下solr项目web.xml中的如下这段代码即可:
- C#集合类:动态数组、队列、栈、哈希表、字典
1.动态数组:ArrayList 主要方法:Add.AddRange.RemoveAt.Remove 2.队列:Queue 主要方法:Enqueue入队列.Dequeue出队列.Peek返回Queue ...
- Java Web学习总结(3)——Servlet详解
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- WebApp调用手机相册或摄像头、拨打电话
WebApp调用手机相册或摄像头.拨打电话 一.总结 一句话总结:input标签,指定type为file,选择好对应的accept即可.camera——相机,相应的accept为image : cam ...