⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 han.cpp

📁 一个基于 c++的汉罗塔模拟源码,他可以选择移动几个塔,也可以选择是否需要终止64位塔的模拟过程
💻 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 + -