zoukankan      html  css  js  c++  java
  • [高精度]P1096 Hanoi 双塔问题

    Hanoi 双塔问题

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

    现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

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

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

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

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

    输出格式
    一个正整数, 为完成上述任务所需的最少移动次数An 。

    输入输出样例

    输入 #1
    【输入样例1】
    1

    【输入样例2】
    2

    输出 #1
    【输出样例1】

    2
    【输出样例2】
    6
    说明/提示
    【限制】

    对于50%的数据,1≤n≤25

    对于100%的数据,1≤n≤200

    题目解析
    这个蒟蒻很懒,没有写题解

    双塔和单塔不同的是:双塔的步数是单塔的2倍(肯定的)。

    所以只要一个过程就行了。

    我们看完题目,不难得出:总数量=2*n;

    步数=(n-1块圆盘的步数)*2

    可以用阶乘做。

    AC完整程序

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std; 
    void input();
    void add();
    void mul();
    void work();
    void output();
    const int maxx=1000;
    int n,a[maxx];
    int main(){
    	input();
    	work();
    	output();
    	return 0;
    }
    void input(){
    	scanf("%d",&n);
    }
    void work(){
    	memset(a,0,sizeof(a));
    	a[maxx-1]=2;
    	for(int i=2;i<=n;i++){
    		add();
    		mul();
    	}
    }
    void output(){
    	bool f=false;
    	for(int i=1;i<maxx;i++){
    		if(a[i]!=0){
    			if(!f)f=true;
    			printf("%d",a[i]);
    		}
    		 else if(f)printf("%d",a[i]);
    	}
    }
    
    void add(){
    	a[maxx-1]++;
    	for(int i=maxx-1;i>0;i--){
    			a[i-1]+=a[i]/10;
    			a[i]%=10;
    	} 
    }
    void mul(){
    	for(int i=maxx-1;i>0;i--){
    		a[i]*=2;
    		
    	}
    	for(int i=maxx-1;i>0;i--){
    		a[i-1]+=a[i]/10;
    		a[i]%=10;
    	}
    }
    
  • 相关阅读:
    为什么说 LINQ 要胜过 SQL
    统一日志系统 Log4Net/ExceptionLess
    使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
    使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
    安全的API接口解决方案
    任务调度及远端管理(基于Quartz.net)
    关于.NET参数传递方式的思考
    C# Parsing 类实现的 PDF 文件分析器
    .NET的弹性及瞬间错误处理库Polly
    Mybatis官方网站
  • 原文地址:https://www.cnblogs.com/luojunhang/p/12300175.html
Copyright © 2011-2022 走看看