约瑟夫问题:n个人围成一圈从1开始报号,报到m的出圈,直到最后1个人。

来源:互联网 发布:商业源码网 编辑:程序博客网 时间:2024/06/05 10:37

面试中的程序题,没有写出来,后来百度了一下,发现时计算机二级考试中的大题。一般有两种方法,1使用数组,对n个人的数组(初始化全为1)进行标记,报到m的标为0。2使用循环链表。

int baoShu(int n,int m){    int flag,i,j=0;    int *arr=(int *)malloc(n*sizeof(int));    for(i=0;i<n;i++)         arr[i]=1;    for(i=1;i<n+1;++i)    {         flag=0;         while(flag<m)         {              if(j==n)                  j=0;              if(arr[j])                  ++flag;              ++j;         }         arr[j-1]=0;         printf("The %4d out person num is: %4d\n",i,j);    }    free(arr);    return j; }


原创粉丝点击