1、一、 需求分析1 本程序要求采用数组的方法,计算并输出约瑟夫环的问题。2 环中总人数 n 和数到的数字 m 由用户输入,m 和 n 为正整数。3 在 Dos 界面输出环中依次被淘汰的人的编号。4 测试数据输入 10 3输出 3 6 9 2 7 1 8 5 10 4二、 概要设计抽象数据类型 为实现上述程序的功能,应以整数存储用户的输入,以及计算出的结果。算法的基本思想根据题目要求,采用线性表的基本操作来实现约瑟夫环问题。定义一个数组,用于计算约瑟夫环的位置。先给数组赋值,让数组的每个值就是这个元素的编号,然后定义一个标志 k,当 K 等于 N 的时候,表示到达约瑟夫环的最后位置。不停的取数组的
2、下一个元素,如果这个元素没有被标记为 0,说明这个位置还没有被排除,j 加 1,进入下一个循环;如果标志 K 等于 n,说明约瑟夫环的循环到达最后一个位置,跳出 While 死循环。否则,把这个位置的元素设为零,标志它被排除。最后输出约瑟夫环到达的最后一个位置。程序的流程 程序由三个模块组成: (1) 输入模块:完成两个正整数的输入,存入变量 n 和 m 中。 (2) 计算模块:用循环的方式设计算法计算出依次被淘汰的序列数。(3) 输出模块:屏幕上显示依次被淘汰的人的编号。三、详细设计 物理数据类型 题目要求输入的正整数的取值范围为正整数,在这里定义为整型即可。int m, n;算法的时空分析
3、:时间复杂度:O( n2) ;空间复杂度:O( n2) ;四、源程序:#includeusing namespace std;main()int a100;int n;coutn;int m;coutm;for(int j=0;jn;j+)aj=j+1;int k=1;int i=-1;while(1)for(j=0;jm;)i=(i+1)%n;if(ai!=0)j+;if(k=n)break;coutaiendl;ai=0;k+;return 0;五、测试结果 输入 10 3 输出 3 6 9 2 7 1 8 5 10 4六、心得体会做这次数据结构实验,不仅让我对这段时间内所学的知识有了更好的理解,而且对自己的编程能力也有所提高。发现在解决问题的过程中还有很多不会地方,在编程和写报告的过程中曾多次遇到各种各样的问题,发现自己的编程能力亟待提高。通过与同学们的交流以及自己思考,最终得到解决并顺利的完成了此次作业。