约瑟夫问题

问题描述
N个人围成一圈,从第一个开始报数,第M个将被杀掉,再由下一个人开始重新报数,直到最后剩下一个人。编程输出所有人出圈的顺序。
输入格式
一行两个正整数m和n,之间用一个空格隔开。
输出格式
输出m行,每行一个正整数,表示依次出圈的人的编号。
输入样例
8 5
输出样例
5
2
8
7
1
4
6
3
代码如下:

#include
using namespace std;
int main()
{
	int n,m;
	cin>>n>>m;
	int a[10001];
	memset(a,0,sizeof(a));
	int left=n,i=1,num=0;
	while(left>0)
	{
		if(a[i]==0)
		{
			num++;
			if(num==m)
			{
				a[i]=1;
				left--;
				num=0;
				cout<<i<<endl;
			}
		}
		i++;
		if(i>n)
		i=1;
	}
}

你可能感兴趣的:(约瑟夫问题)