提交文件: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);
}