首页 > 其他分享 >汉诺塔(2题)

汉诺塔(2题)

时间:2023-07-05 22:03:13浏览次数:29  
标签:ch int hanoi char 汉诺塔 include getchar

 题解:

 

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cmath>
 5 #include <cstring>
 6 #include <vector>
 7 #include <map>
 8 #include <stack>
 9 #include <queue>
10 #include <deque>
11 #include <list>
12 #include <set>
13 #include <cctype>
14 
15 using namespace std;
16 
17 inline int read(int &s)
18 {
19     s = 0;
20     int w = 1;
21     char ch = getchar();
22     while (ch < '0' || ch > '9')
23     {
24         if (ch == '-')
25             w = -1;
26         ch = getchar();
27     }
28     while (ch >= '0' && ch <= '9')
29     {
30         s = s * 10 + ch - '0';
31         ch = getchar();
32     }
33     return s * w;
34 }
35 
36 inline void write(int x)
37 {
38     if (x < 0)
39     {
40         putchar('-');
41         x = -x;
42     }
43     if (x > 9)
44         write(x / 10);
45     putchar(x % 10 + '0');
46 }
47 
48 void move(char A, char C, int n)
49 {
50     printf("%c->%c\n", A, C); // 把第n个圆盘从..移到..
51 }
52 
53 void hanoi(char A, char B, char C, int n)
54 {
55     if (n == 1)
56         move(A, C, n);
57     else
58     {
59         // 将n - 1个圆盘从A借助C移到B
60         hanoi(A, C, B, n - 1);
61         // 将A上的最后一个(第n个)移到C
62         move(A, C, n);
63         // 将n - 1个圆盘从B借助A移到C
64         hanoi(B, A, C, n - 1);
65     }
66 }
67 
68 int main()
69 {
70     int n;
71     read(n);
72     hanoi('A', 'B', 'C', n);
73     return 0;
74 }

 

 

 题解:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 void move(char a, char c, int n)
 5 {
 6     printf("%d:%c->%c\n", n, a, c);
 7 }
 8 
 9 void hanoi(char a, char b, char c, int n)
10 {
11     if (n == 1)
12         move(a, c, n);
13     else
14     {
15         hanoi(a, c, b, n - 1);
16 
17         move(a, c, n);
18 
19         hanoi(b, a, c, n - 1);
20     }
21 }
22 
23 int main()
24 {
25     int n;
26     cin >> n;
27     char tmp; // 接受空格
28     char a, b, c;
29     tmp = getchar();
30     a = getchar();
31     tmp = getchar();
32     b = getchar();
33     tmp = getchar();
34     c = getchar();
35     tmp = getchar();
36 
37     hanoi(a, b, c, n);
38 
39     return 0;
40 }

 

很经典的递归题目

标签:ch,int,hanoi,char,汉诺塔,include,getchar
From: https://www.cnblogs.com/nijigasaki14/p/17529910.html

相关文章

  • 汉诺塔
    使用递归模拟N层汉诺塔的移动过程把N层塔从A移到C,分为三步:1.把A的N-1层移到B2.把A剩下最后一层移到C3.把B上的N-1层移到C使用递归只要解决N-1层问题就能解决全部问题。新建函数voidmove(intn,chara,charb,charc);n为层数,a为起始位置,b为缓冲位置,c为目标位......
  • 通天之汉诺塔
    通天之汉诺塔汉诺塔移动的次数是2^n-1,但是呢由于本题的n很大,所以要用到高精,考察高精度,来愉快的打一下吧(呜呜我一直觉得高精没啥用所以妹学#include<bits/stdc++.h>usingnamespacestd;longlongn,a[10000010],l=1;voidp()//高精度函数加法{for(inti=1;i<=l;i......
  • 汉诺塔(三)
    汉诺塔(三)3000 ms | 内存限制:655353在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧......
  • 汉诺塔问题
    移动步骤三根柱子A,B,C。A杆上有N个N>1N>1穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:*每次只能移动一个圆盘;大盘不能叠在小盘上面。解法一:使用递归分析:当只有一个时,只需把第一个盘从a移到c两个时,先把第一个盘从a移到b,再把第二个盘从a移到c,最......
  • 汉诺塔问题(递归)
    #include<iostream>usingnamespacestd;voidmove(intn,chara,charb,charc){ if(n==0) return; move(n-1,a,c,b); cout<<a<<"-->"<<c<<endl; move(n-1,b,a,c);}intmain(){ intn; chara='......
  • 汉诺塔VII 1997 (技巧+递推)
    汉诺塔VIITimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1261    AcceptedSubmission(s):838ProblemDescriptionn个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。......
  • 汉诺塔DP
    题目描述如果将课本上的汉诺塔问题稍做修改:给定N只盘子,3根柱子,但是允许每次最多移动相邻的M只盘子(当然移动盘子的数目也可以小于M),最少需要多少次?输入格式输入数据仅有一行,包括两个数N和M(0<=M<=N<=8)输出格式仅输出一个数,表示需要移动的最少次数 #in......
  • 汉诺塔递归
    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的n片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只......
  • 递归汉诺塔
    题目描述法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的n片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这......
  • 汉诺塔与二进制、满二叉树的千丝万缕
    汉诺塔(TowerofHanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。汉诺塔递归算法3......