LFYZ-OJ ID: 1011 hanoi双塔问题
思路
- 虽然每种大小盘子数量为2,但对总步数的影响只是一个简单的倍数关系而已,递推关系很容易可以总结出来:an=an-1+2+an-1=2(an-1+1),n=1时,a1=2。故递推的过程就是从a1=2开始每次先加1,再乘2。 
- 因递推步骤较长(1~200),一定需要高精度运算,按照每次乘2估算,210=1024,即103,当递推200次时,则最大位数会有1000200/10=1060,所以最大数位大约为60位,设置个大小为100的数组来存储高精度数已绰绰有余。 
- 可以将程序的实现划分为几个功能函数: - print()输出高精度数字,- jia1()高精度数字+1,- cheng2()高精度数字乘2。
例程1
#include<iostream>
using namespace std;
int an[100];			                //存储an, a[0]为位数
void print(){                           //高精度数字输出函数
	for(int i=an[0]; i>=1; i--)	printf("%d", an[i]);
}
void jia1(){                            //高精度数字+1
	int i=1, jw=0;
	an[1]+=1;                           //最低位+1
	do{                                 //进位处理
	    an[i]=an[i]+jw;
		jw=an[i]/10;
		an[i]%=10;
		i++;
	}while(jw);
	if(an[an[0]+1])  an[0]++;
}
void cheng2(){                          //高精度数字*2
	int i, jw;
	for(i=1, jw=0; i<=an[0]; i++){
		an[i]=an[i]*2+jw;
		jw=an[i]/10;
		an[i]%=10;
	}
	if(jw) { an[i]=jw; an[0]=i; }
}
int main(){
	int n;
	scanf("%d", &n);
	an[0]=1, an[1]=2;                   //将an按照a1来初始化:a1=2;
	for(int i=2; i<=n; i++){
		jia1();                         //+1
		cheng2();                       //*2
	}
	print();
}
例程2
*例程2的思路是先按位乘2,再在最低位+2,然后统一处理进位,这样就有效减少了代码量。
#include<cstring>
#include<iostream>
using namespace std;
int f[300],n;
void oper(){
	int i;
	for (i=1;i<=f[0];i++) f[i]*=2;      //按位×2
	f[1]+=2;                            //最低位+2
	for (i=1;i<=f[0];i++){              //统一处理进位
		f[i+1]+=f[i]/10;
		f[i]%=10;
	}
	if (f[f[0]+1]!=0) f[0]++;           //确定位数
}
int main(){
	cin>>n;
	memset(f,0,sizeof(f));              //这行不需要,全局的会自动初始化为0
	f[0]=1; f[1]=2;                     //f初始化为a1=2;
	for(int i=2;i<=n;i++)
	    oper();
	for(int i=f[0];i>=1;i--)            //输出结果
	    cout<<f[i];
	cout<<endl;
	return 0;
}
LFYZ-OJ ID: 1011 hanoi双塔问题的更多相关文章
- 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的情 ... 
- b161: NOIP2007 4.Hanoi双塔问题
		zerojudge 汉诺塔?图片问度娘 b161: NOIP2007 4.Hanoi双塔问题 题目: 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都 ... 
- [高精度]P1096 Hanoi 双塔问题
		Hanoi 双塔问题 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现 ... 
- hanoi双塔
		汉诺塔,经典的递归. 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK.有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子.现在请你编 ... 
- 洛谷——P1096 Hanoi双塔问题
		https://www.luogu.org/problem/show?pid=1096 题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个 ... 
- 【NOIP2007】Hanoi双塔问题
		题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现要将这些圆盘移到C柱上 ... 
- 【题解】Hanoi双塔问题
		题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将这些圆盘移到C柱上, ... 
随机推荐
- Arch Linux安装Firefox 火狐中文版
			很多人刚安装好系统之后,刚开始内置的浏览器是火狐的英文版,很多时候因为需要账号同步的原因需要国内版本的火狐浏览器,这个时候我们应该怎么操作呢? 其实也非常的简单 首先我们 输入命令 pacman -S ... 
- ASP.NET基础知识汇总之WebConfig各节点介绍
			web.config虽然一直用,接触最多的也就是节点appSettings和connectionSettings,今天系统的梳理一下,了解一下webconfig各个节点的含义,先简单的浏览一下具体的w ... 
- rm: cannot remove ‘overlay/’: Device or resource busy
			umount /var/lib/docker/overlay #取消挂载就可以啦 rm -rf overlay/ 
- ✔ OI Diary ★
			一 | 2019-3-28 1.整晨,云之考矣,暴后皆不会,邃无感而写斯普雷尔,然则午后知暴可六十哉. 然则斯普雷毙,虽特判之矣,然则暴只判二十哉,呜呼! 2.午间归宿,视白购书一本,目触,感之甚集 ... 
- matlab读取csv文件数据并绘图
			circle.m(画二维圆的函数) %该函数是画二维圆圈,输入圆心坐标和半径%rectangle()函数参数‘linewidth’修饰曲线的宽度%'edgecolor','r',edgecolor表示 ... 
- Abp vNext 切换MySql数据库
			Abp vNext是Abp的下一代版本,目前还在经一步完善,代码已经全部重写了,好的东西保留了下来,去除了很多笨重的东西,从官宣来看,Abp vNext主要是为了以后微服务架构而诞生的. 从源码来看, ... 
- Neutron flat network 学习
			flat network 是不带 tag 的网络,要求宿主机的物理网卡直接与 linux bridge 连接,这意味着: 每个 flat network 都会独占一个物理网卡. 在 ML2 配置中 ... 
- SpringCloud学习笔记:熔断器Hystrix(5)
			1. Hystrix简介 在分布式系统中,服务与服务之间相互依赖,一种不可避免的情况是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞. Hystrix提供熔断器功能,能够阻止分布式 ... 
- Java垃圾收集器概述
			垃圾收集器的操作 查找未使用的对象,释放内存,并压缩堆,避免内存碎片 一个java程序,有执行应用程序逻辑的线程和执行GC的线程组.当GC跟踪对象引用,或在内存中移动对象,它必须确保应用程序线程没有使 ... 
- Lodop、c-lodop注册与角色简短问答
			注册与角色:参考http://www.c-lodop.com/demolist/t1.html参考链接里的三种场景,是哪种角色.客户端访问网站后用自己的打印机打印.是客户端本地打印角色.IP和域名注册 ... 
