双色汉诺塔其实和单色汉诺塔是一样的。具体为什么我也不知道。
汉诺塔这个东西我以前看过一篇文章
大概就是说,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",n,a,b); //第二步 8 move(n - 1,c,b,a); //第三步 9 } 10 else{ 11 printf("%d %c %c\n",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 }
√
破题不能东方化好烦啊