约瑟夫问题,需解答

复制代码
#include <iostream>
using namespace std;
int main()
{
    int a[50] = { 0 }, b[50] = {0}, m, n, i, x, j = 1, count = 0;
    while (cin >> m >> n) {
        x = m;               //防止在编译过程中造成数据更改
        for (i = 1; i <= m; i++)  //将数存储到数组里
        {
            a[i] = i;
        }
        while (x >= 1)
        {
            for (i = 1; i <= m; i++)
            {
                if (a[i] != 0)
                {
                    count++;         //报数
                }
                if (count == n)
                {
                    b[j] = a[i];      //用另一个数组重新按顺序记录
                    a[i] = 0;         //已经报过数的将其值赋为0
                    count = 0;        //重新开始报数
                    x--;            //总数在减少
                    j++;
                }
            }
        }
        for (i = 1; i <= m; i++)               //输出
        {
            cout << b[i] << " ";
        }
        cout << endl;
    }
    return 0;
}
复制代码

 

posted @   刘海烽  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示