?? han.cpp
字號:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void digui(int n,char x,char y,char z);
void show(char x,int n,char y);
double cishu(int x);
void main()
{
cout<<setw(30)<<" "<<"漢羅塔問題的模擬\n";
cout<<setw(4)<<" "<<"傳說婆羅門廟里有一個塔臺,臺上有3根標號為A、B、C用鉆石做成的柱子,"
<<"在A柱上放著64個金盤,每一個金盤都比下面的略小一點。把A柱上的金盤全部移到C柱"
<<"上的那一天就是世界末日."<<endl<<endl;
cout<<"現在將為您模擬漢羅塔的移動過程..."<<endl<<"請選擇您需要的操作:"<<endl<<" ";
loop1:
for(int i=0;i<35;i++)
cout<<" *";
cout<<endl;
cout<<" * 1,移動全部64個金盤的過程"<<setw(43)<<'*'<<endl<<" * 2,移動N個金盤的過程"<<setw(48)<<'*'<<endl
<<" * 3,假設您移動一次要用S秒那么要移動N個金盤所要用的時間為"<<setw(13)<<'*'<<endl
<<" * 4,退出程序"<<setw(57)<<'*'<<endl
<<" * ps:由于64個金盤顯示太長可用'ctrl+c'來關閉用'pause/回車'來暫停/啟動*\n ";
for(i=0;i<35;i++)
cout<<" *";
cout<<endl;
cout<<"您的選擇為@_@:";
char n;int w,t,s;
loop:
cin>>n;
switch (n)
{
case'1':w=64;digui(w,'A','B','C');cout<<"請您繼續選擇!\n";goto loop1;
case'2':cout<<"你要移動幾個金盤?N=";cin>>w;digui(w,'A','B','C');cout<<"請您繼續選擇!\n";goto loop1;
case'3':cout<<"你移動一個要用多少秒?S=";cin>>s;cout<<"有幾個金盤?N=";cin>>t;
cout<<"您需要花"<<cishu(t)*s<<"秒來移動他們!\n";cout<<"請您繼續選擇!\n";goto loop1;
case'4':break;
default:cout<<"您輸入的數字超出選擇范圍!"<<endl<<"請重新選擇^-^:";goto loop;
};
}
void digui(int n,char x,char y,char z)
{
if(n==1)
show(x,1,z);
else
{
digui(n-1,x,z,y);
show(x,n,z);
digui(n-1,y,x,z);
}
}
void show(char x,int n,char y)
{
cout<<"把"<<x<<"中的第"<<n<<"個金盤移動到"<<y<<endl;
}
double cishu(int x)
{
return pow (2,x)-1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -