提交文件:hanoi.exe 输入文件:hanoi.in 输出文件:hanoi.out 题目描述: 你对经典的hanoi塔问题一定已经很熟悉了。有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上? 现在我们来将hanoi塔扩展一下,由三根柱子扩展到四根柱子,其余规则不变。例如,3个圆盘,四根柱子A到D,初始时圆盘都A柱上,我们用五步就可以将圆盘都挪到D柱上: 第一步:将圆盘1从A挪到B; 第二步:将圆盘2从A挪到C; 第三步:将圆盘3从A挪到D; 第四步:将圆盘2从C挪到D; 第五步:将圆盘1从B挪到D。 你的任务是写一个程序求解四柱子hanoi塔问题最少要多少步可以解决。 输入格式(light.in): 输入只有一行,为一个正整数n。(1<=n<=1000) 输出格式(light.out): 输出为一个正整数,代表n盘四柱子hanoi塔问题最少要多少步可以解决。 样例 hanoi.in hanoi.out 3 5
#include<cstdio> int i,k,n,s; int main(){ freopen("hanoi.in","r",stdin); freopen("hanoi.out","w",stdout); scanf("%d",&n); switch(n){ case 1:{ printf("%d",1); return 0; } case 2:{ printf("%d",3); return 0; } } n--;i=2;k=2;s=1; while(true){ if(n>i){ n=n-i; s=s+i*k; i++; k=k*2; } else{ s=s+n*k; break; } } printf("%d",s); }