5.约瑟夫问题(数组法)

Posted YuRi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.约瑟夫问题(数组法)相关的知识,希望对你有一定的参考价值。

另一种解法:将数组全部置1,累计相加到报数,则将该位置置为0,意为该位出列,如此反复。关键在于:把数组作环状处理,这个手法已经演练很多遍了!
技术分享

/*------------完整代码@映雪-------------*/

#include <iostream>
using namespace std;
int main()
{
    int count=0,s=0,i,j=-1,n=3,m=3;
    int a[100];
    for(i=0;i<n;i++)/*将数组全部置1*/
    a[i]=1;
    while(count<n)
    {
        j=(j+1)%n;
        s=s+a[j];
        if(s==m)/*累加到报数*/
        {
            a[j]=0;/*位置置0,表示出列*/
            s=0;
            count++;/*出列计数+1*/
            printf("%d ",j+1);
        }
    }
    return 0;
}

以上是关于5.约瑟夫问题(数组法)的主要内容,如果未能解决你的问题,请参考以下文章

约瑟夫问题-报数

递推公式法解决约瑟夫问题

51nod 1073约瑟夫环 递归公式法

数据结构总结系列——循环链表之约瑟夫问题

随机化数组和约瑟夫环

约瑟夫双向生死游戏