约瑟夫问题

约瑟夫问题

题目描述

有 m 个人,其编号分别为 1∼m,按顺序围成一个圈。

现在给定一个数 n,从第一个人开始依次报数,报到 n 的人出圈,然后再从下一个人开始,继续从 11 开始依次报数,报到 n 的人再出圈,……如此循环,直到最后一个人出圈为止。

编程输出所有人出圈的顺序。

输入格式

一行两个正整数 m 和 n,已知 1≤m≤100,1≤n≤32767。

输出格式

输出 �m 行,每行一个正整数,表示依次出圈的人的编号。

样例 #1

样例输入 #1

8 5

样例输出 #1

5
2
8
7
1
4
6
3
#include 
using namespace std;
int m , n , cnt = 0 , out = 0;
bool flag[1005];
int main()
{
	cin >> m >> n;
	while(1)
	{
		for(int i = 1;i <= m;i++)
		{
			if(flag[i] == false)
			{
				cnt++;
				if(cnt == n)
				{
					out++;
					cnt = 0;
					flag[i] = true;
					cout << i << endl;
					if(out == m)
					{
						return 0;
					}
				}
			}
		}
	}
}

 

你可能感兴趣的:(算法,2024文章专题,算法)