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柱上, ...
随机推荐
- jQuery 中的简单动画
制作动画常用方法: show("速度") 显示元素 hide("速度") 隐藏元素 toggle() 切换效果 例如下jQuery代 ...
- Java基础——0 前言
- 产品设计-后台管理权限设计RBAC
最近在做OA系统,设计到不同的员工会拥有不同权限对OA进行操作,总结了一下整体的设计 做权限的分配就是为了更好的管理不同类别的员工,如人事部可以看到普通员工的薪酬,可以查看全部员工的考勤数据请假等,而 ...
- day5-python的文件操作-坚持就好
目录摘要 文件处理 1.文件初识 2.文件的读操作 3.文件的写操作 4.文件的追加操作 5.文件的其他操作 6.文件的修改 正式开始 文件处理:写了这么多代码了,有的时候我们执行完成的结果想永久保存 ...
- python实现数据结构单链表
#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...
- AI pytorch
pytorch 参考链接: https://pytorch.org
- python小白——进阶之路——day3天-———运算符
(1)算数运算符: + - * / // % ** (2)比较运算符: > < >= <= == != (3)赋值运算符: = += -= *= /= //= %= ** ...
- Linux笔记-nohup和&
nohup:忽略SIGHUP信号,当关闭shell之后,程序仍然执行,但是如果在shell中 ctrl+c,会结束程序 &:忽略SIGINT信号,程序后台执行,在shell中 ctrl+c,程 ...
- Swagger 配置
放行 , 不拦截. @Configuration open class MyWebMvcConfig : WebMvcConfigurationSupport() { override fun add ...
- pyspider安装出现问题参考
File "c:\users\13733\appdata\local\programs\python\python37\lib\site-packages\pyspider\run.py&q ...