视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据结构实验报告——约瑟夫环问题
2025-10-05 01:02:13 责编:小OO
文档
一、需求分析

1.本程序要求采用数组的方法,计算并输出约瑟夫环的问题。

2.环中总人数n和数到的数字m由用户输入,m和n为正整数。

3.在 Dos 界面输出环中依次被淘汰的人的编号。

4.测试数据

输入  10  3

输出  3  6  9  2  7  1  8  5  10  4

二、概要设计

  抽象数据类型 

为实现上述程序的功能,应以整数存储用户的输入,以及计算出的结果。

  算法的基本思想

     根据题目要求,采用线性表的基本操作来实现约瑟夫环问题。

定义一个数组,用于计算约瑟夫环的位置。先给数组赋值,让数组的每个值就是这个元素的编号,然后定义一个标志k,当K等于N的时候,表示到达约瑟夫环的最后位置。不停的取数组的下一个元素,如果这个元素没有被标记为0,说明这个位置还没有被排除,j加1,进入下一个循环;如果标志K等于n,说明约瑟夫环的循环到达最后一个位置,跳出While死循环。否则,把这个位置的元素设为零,标志它被排除。最后输出约瑟夫环到达的最后一个位置。

  程序的流程 

程序由三个模块组成: 

(1) 输入模块:完成两个正整数的输入,存入变量 n 和m 中。 

(2) 计算模块:用循环的方式设计算法计算出依次被淘汰的序列数。

(3) 输出模块:屏幕上显示依次被淘汰的人的编号。

三、详细设计 

物理数据类型 

题目要求输入的正整数的取值范围为正整数,在这里定义为整型即可。

     int m,n;

算法的时空分析:

       时间复杂度:O(n2);

       空间复杂度:O(n2);

四、源程序:

      #include

using namespace std;

main()

{

            int a[100];

    int n;

cout<<"请输入环中总人数n:";

cin>>n;

    int m;

cout<<"请输入所报数m:";

cin>>m;

for(int j=0;j        a[j]=j+1;

    int k=1;

    int i=-1;

    while(1){

     for(j=0;j        {

            i=(i+1)%n;

            if(a[i]!=0)

                j++;

         }

        if(k==n)

            break;

     cout<        a[i]=0;

        k++;

        }

    return 0;

}

五、测试结果 

  输入 10   3 

  输出  3  6  9  2  7  1  8  5  10  4

六、心得体会

  做这次数据结构实验,不仅让我对这段时间内所学的知识有了更好的理解,而且对自己的编程能力也有所提高。发现在解决问题的过程中还有很多不会地方,在编程和写报告的过程中曾多次遇到各种各样的问题,发现自己的编程能力亟待提高。通过与同学们的交流以及自己思考,最终得到解决并顺利的完成了此次作业。下载本文

显示全文
专题