约瑟夫问题的C++实现

2021/9/20 1:04:56

本文主要是介绍约瑟夫问题的C++实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题如图:

 核心思想:循环数组

数组从0开始,然后i无限自增,我们只要对i%n,就可以构造一个循环数组了

核心代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    int n, k, m, p, q, sum = 0, i, t;
    cin >> n >> k >> m;
    p = n;
    q = k;

    int* arr = new int[n + 9];
    for (int i = 0; i < n; i++)
    {
        arr[i] = 1;
    }

    for (i = k - 1; ; i++)
    {

        if (arr[(i + 1) % n])
        {
            sum++;
        }
        if (sum == m && arr[(i + 1) % n])
        {
            arr[(i + 1) % n] = 0;
            sum = 0;
            p--;//淘汰一个人
            cout << i % n + 1 << " ";
        }
        if (!p)break;//全部淘汰,结束循环
    }

    return 0;
}



这篇关于约瑟夫问题的C++实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程