欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 约瑟夫问题(信息学奥赛一本通-2037)

约瑟夫问题(信息学奥赛一本通-2037)

2025/1/31 2:10:07 来源:https://blog.csdn.net/2402_84298973/article/details/145389653  浏览:    关键词:约瑟夫问题(信息学奥赛一本通-2037)

【题目描述】

N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M
的人出圈;…输出依次出圈的人的编号。

【输入】

输入N和M。

【输出】

输出一行,依次出圈的人的编号。

【输入样例】

8 5

【输出样例】

5 2 8 7 1 4 6 3

【提示】

【数据范围】

对于所有数据,2≤N,M≤1000。

【题解代码】

#include<iostream>
using namespace std;const int N = 5e3 + 10;
int nums[N];
int num = 0;int main()
{int n, m;cin >> n >> m;int peo = n;  //表示没出圈的人数for (int i = 1; i <= n; i++)  //下表为1表示没出圈{nums[i] = 1;}while (peo > 0){for (int i = 1; i <= n; i++){if (nums[i] == 1)  //当前这个人没出圈{if (peo == 1)  //只剩1个人了{cout << i;return 0;}num++;  //报数if (num == m)  //报到m的人出圈{nums[i] = 0;  //该人出圈cout << i << ' ';  //将该人的编号输出num = 0;  //重新计数peo--;  //没出圈的人减少1个}}}}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com