双色汉诺塔

双色汉诺塔其实和单色汉诺塔是一样的。具体为什么我也不知道。

汉诺塔这个东西我以前看过一篇文章

大概就是说,n个片移动最少次数一定是2的n次方减一。具体移动方法是:

①先把最小的1片按顺时针(或逆时针,但是一旦确定就不可以改变)移动到下一个棒子上

②再移动除了最小的1片之外唯一可以移动的片到可移动的位置上。

对,就这么简单。大家可以闲的没事玩一玩,反正有一天我玩了好长时间。

顺便说一句移动64个片要非常长的时间,如果移动1次64个片算一年的话那么紫妈就17asdfalsdfkjsdlkfjlksdjflkdsjfkljsldkfjldksjflkdsjflksa

咳咳……不过这个题啊不用知道那么多,递归就可以了

要想把n片从a棒移动到b棒,只要三步:

①把n-1片从a棒移到c棒

②把第n片从a棒移到b棒

③把n-1片从c棒移到b棒

于是代码就香喷喷的出炉了

 1 #include<cstdio>
 2 using namespace std;
 3 void move(int n,char a,char b,char c)
 4 {
 5     if(n > 1){
 6         move(n - 1,a,c,b);    //第一步 
 7         printf("%d %c %c
",n,a,b);    //第二步 
 8         move(n - 1,c,b,a);    //第三步 
 9     }
10     else{
11         printf("%d %c %c
",n,a,b);
12         return;
13     }
14 }
15 int main()
16 {
17     freopen("twohanoi.in","r",stdin);
18     freopen("twohanoi.out","w",stdout);
19     int n;
20     scanf("%d",&n);
21     move(n,'A','B','C');
22     return 0;
23 }

破题不能东方化好烦啊