2037:【例5.4】约瑟夫问题
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 14217 通过数: 7319
【题目描述】
N
个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M
的人出圈;…输出依次出圈的人的编号。
【输入】
输入N
和M
。
【输出】
输出一行,依次出圈的人的编号。
【输入样例】
8 5
【输出样例】
5 2 8 7 1 4 6 3
【提示】
【数据范围】
对于所有数据,2≤N,M≤1000。
#include <iostream>
using namespace std;
int a[1010];
int main()
{
int n,m;
cin>>n>>m;
int k=0,p=0,cnt=0;
while(cnt<n)
{
p++;
if(!a[p]) k++;
if(k==m)
{
cout<<p<<" ";
k=0;
a[p] = 1;
cnt++;
}
if (p==n)p=0;
}
return 0;
}
该博客探讨了约瑟夫环问题的算法解决策略,提供了一个C++代码示例,展示了如何处理N个人报数到M的人出圈的情况。程序通过循环和数组状态标记实现,直至所有人出圈。

1253

被折叠的 条评论
为什么被折叠?



