文档介绍:1
学号:
200840420149
多石坯2采jjt
课程设计
题目汉诺塔
教学院计算机学院
专业计算机
班级网络技术
姓名
指导教师
2010年12月17日
2
课程设计任务书
2009〜20=1),那么只要从x柱子直接移动到z柱子就可以了。不需要中间以哦的那个其他的盘子。
如果要移动的盘子不止一个,那么就要采取一定的策略。这个策略就是先把上面的n—1个盘子移动到中间的柱子,也就是y,然后把最地下一个盘子移动到z柱子,然后再把中间柱子y上的盘子通过哦a柱子移动到z柱子上。
else{
movedishes(n-1,x,z,y);〃把上面的n—1个盘子通过z柱子移动到y柱子上,这样才能把最后一个盘子移动到z柱子上。
printf("%d.%c~%c",i+1,x,z);〃输出这次移动
movedishes(n-1,y,x,z);〃然后再把刚才移动出来放在y柱子上的n—1个盘子移动到z柱子上。
}
}
五、流程图
6
六、程序代码:
#>
inti=0;/*记录每一步为第几步*/
voidmovedishes(intn,intx,inty,intz)
{
if(n==l)
printf(”%d.%c~%c",i+l,x,z);/*输出步骤*/
i++;
7
if(i%7==0)/*每行显示七个*/
printf("\n");
}
else
{
movedishes(n-1,x,z,y);/*把a杆上n-1个盘子设法借助c杆移动到b杆*/
printf("%d.%c~%c",i+1,x,z);/*输出步骤*/
i++;
if(i%7==0)
printf("\n");
movedishes(n-1,y,x,z);/*把b杆上的n-1个盘子借助a杆移动到c杆*/
}
}
main()
{
intm,j=1;/*m记录需要移动盘子的数目,j记录循环条件*/
printf("欢迎使用本系统
\n");
printf("III
\n");
printf(”II
\n");
8
printf(”II
\n");
printf(”II
\n");
printf(”II
\n");
printf(”aIbI
\n");
printf("II
\n");
printf("II
\n");
printf("II
\n");
printf("
\n");
while(j==l)
{
printf("请输入a上盘子数:\n");
scanf("%d",&m);
printf("移动顺序:\n");
movedishes(m,'a','b','c');
printf("\n是否继续:\\\n");
scanf("%d",&j);
while(j!=1&&j!=2)
9
{
printf("输入错误,请重新输入:");
printf("\n是否继续:\\\n");
scanf("%d",&j);
}
i=0;/*每次计算完重新置1*/
}
printf(”谢谢使用,再见!\n");
}
七、程序调试与测试
1、程序调试
1)使用Microsoftvisualc++编辑软件进行源程序的编写。
2)使用Microsoftvisualc++软件进行编译,步骤:单击“组建”选择“编译”
3)使用Microsoftvisualc++运行程序并调试,步骤:单击“组建”选择“执行”。
2、运行及程序界面
1)编辑程序界面
图(一)
10
■icrosoftVisualC++
图(二)
ThiebuildcomrrriTLdrequires:=?
16
图(三)
图(一)
-Oerror(s),0warning(s)
TRx组建/调试x在交件i中查找\、在****斗卜r
2)执行程序及运行后界面
16
16
图(二)
16
3、运行过程
图(一)
15
|
|
|
|
|aI
I
I
I
I
I
I
I
I
bI
I
I
I
八、结果分析
欢迎使用本系统
I
I
I
I
I
cI
I
I
I
16
16
请输入a上盘子数:
6
移动顺序:
——~