求给一个C++程序注释!!程序代码如下:谢谢!⼀⼀后注释即可

2024年11月20日 14:59
有1个网友回答
网友(1):

#include
#include
#include// 递归法
#include // 堆栈法
using namespace std; // 使用命名空间
void context()// 菜单 作为全局函数在主函数中调用
{
cout<cout<cout<cout<cout<cout<cout<}
// 递归法定义的函数
static long int m=1;// 用来计算移动步骤步数,静态变量才能不断叠加
void hanoi(int n,int a,int b,int c)//
{
if(n==1)
{
printf("(%d) %d-->%d\n",m,a,c);//
m++;//
}
else
{
hanoi(n-1,a,c,b); //a,b,c为不定值,如1,2,3,4,5,6等。
printf("(%d) %d-->%d\n",m,a,c);//只有当上一句得到结果,它才会执行
m++;
hanoi(n-1,b,a,c);//a,b,c为不定值,如1,2,3,4,5,6等。
}
}
// 非递归法定义的类
class oprt
{
public:
int begin,end;
char src,dst,bri;//Src,dst,bri,分别代表3个杆,src:source,dst:destination,bri:bridge
oprt(){}; // 构造函数定义并初始化为什么也不做
oprt(int rbegin,int rend,char rsrc,char rdst,char rbri)://
begin(rbegin),end(rend),src(rsrc),dst(rdst),bri(rbri){}//
};// 为了简化,其中的成员都定义成了public
#define print_oprt(op) cout<<"移动盘"<<(op).begin<<" 从 \'"<<(op).src<<"\' 到 \'"<<(op).dst<<"\'"<typedef stack oprt_stack;//oprt_stack表示堆栈
void main()
{
int sd;// 定义一个整型变量sd(只有三个值:1,2,0),用于switch(sd)中的选择遁环
while(1)
{
context(); // 调用全局函数context()输出相关信息
cout<<"请输入你选择:";
cin>>sd; // 请用户输入sd的值来选择用递归法还是堆栈法或者退出
switch(sd) // switch选择开始,如果用户输入1就从case 1:开始一直往下到结束,然后会回到循环while(1)
{
case 1:
/*递归法*/
int d;
cout<<"请输入盘数:";
cin>>d;
hanoi(d,1,2,3);// 调用递归函数进行处理,并输出相关信息(即圆盘的移动方法)
break;
case 2:
/*堆栈法 */
{
oprt_stack ostack;// 定义了一个?
oprt tmp;// 定义了一个oprt类对象 tmp
cout<<"请输入盘数:";
int ch; // 定义了一个整型变量 ch 表示圆盘的个数,用于做为ostack.push函数的一个实参
cin>>ch; // 请用户输入圆盘个数
ostack.push(oprt(1,ch,'1','2','3'));// 调用ostack.push函数,用oprt(1,ch,'1','2','3')做为参数
while (!ostack.empty()) //
{
tmp = ostack.top();//
ostack.pop(); //
if (tmp.begin != tmp.end) //
{
ostack.push(oprt(tmp.begin,tmp.end-1,tmp.bri,tmp.dst,tmp.src));//
ostack.push(oprt(tmp.end,tmp.end,tmp.src,tmp.dst,tmp.bri));//
ostack.push(oprt(tmp.begin,tmp.end-1,tmp.src,tmp.bri,tmp.dst));//

}
else
print_oprt(tmp);//
}
}
break;
case 0:
return;
}
}
}

这不是C++标准,我学的是C++标准,不用C了,所以有一些看不懂着,你留着问题,我参考编个C++标准的一样程序来大家一起学习学习