zoukankan      html  css  js  c++  java
  • 汉诺塔:递归

    题目描述

    汉诺塔是一种古老的游戏。

    一共3个柱子,标号为1,2,3

    1号柱子有从大到小一共n个盘子。

    每次移动最上方的一个盘子,可以移动到其他的柱子。

    任何一个盘子,都不能叠在比它更小的盘子的上方。

    请把盘子从1号柱子,全部移动到3号柱子。

     

    起始:

     

    移动到这样:

     

    现在,给出了n个盘子,请你描述一下用最短次数移动的过程。

    输入

    一个数,n,表示盘子的数量(n<=10

    输出

    输出若干行。

    每次操作,输出一行。输出“Move x from x to x”的格式。

    最小盘子的编号为1,最大盘子的编号为n

    样例输入

    4

    样例输出

    Move 1 from 1 to 2
    Move 2 from 1 to 3
    Move 1 from 2 to 3
    Move 3 from 1 to 2
    Move 1 from 3 to 1
    Move 2 from 3 to 2
    Move 1 from 1 to 2
    Move 4 from 1 to 3
    Move 1 from 2 to 3
    Move 2 from 2 to 1
    Move 1 from 3 to 1
    Move 3 from 2 to 3
    Move 1 from 1 to 2
    Move 2 from 1 to 3
    Move 1 from 2 to 3

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    void hanoi(int a,int b,int c,int n){					//代表 n个盘子从a到c,b为辅助柱 
    	if(n==1)
    	printf("Move %d from %d to %d
    ",n,a,c);			//只剩下一个盘子时,直接从a到c 
    	else{
    		hanoi(a,c,b,n-1);					//将n-1个盘子,从a移动到b,c为辅助柱 
    		printf("Move %d from %d to %d
    ",n,a,c);		//将第n个盘子从a移动到c 
    		hanoi(b,a,c,n-1);					//将n-1个盘子,从b移动到c,a为辅助柱 
    	}
    }
    int main(){
    	int n;
    	cin>>n;
    	hanoi(1,2,3,n);
    	return 0;
    }
    
  • 相关阅读:
    Java的家庭记账本程序(K)
    构建之法阅读笔记01
    Java的家庭记账本程序(J)
    iOS-CALayer实现简单进度条
    iOS-CALayer
    iOS-CAEmitterLayer(粒子效果)
    iOS-OpenGLES 简单渲染
    iOS-CoreImage简单使用
    iOS富文本-NSAttributedString简单封装
    iOS后台运行
  • 原文地址:https://www.cnblogs.com/52dxer/p/10565326.html
Copyright © 2011-2022 走看看