题目描述
约瑟夫环问题:设有 n 个人围坐一圈,并按顺时针方向 1−n 编号。从第 s 个人开始进行报数,报数到第 m个人,此人出圈,再从他的下一个人重新开始从 1 到 m 的报数进行下去 ,直到只剩一个人为止。
输入
人数 n;
从第 s 个人开始报数 s;
报到第几个数 m。
输出
剩下的最后一个人的编号。
输入输出样例
样例输入 #1
9
1
3
样例输出 #1
1
【代码】
#include<bits/stdc++.h>
using namespace std;
int a[110];
int main()
{
int n,s,m,num=1;
cin>>n>>s>>m;
int sum=n;
int k=s-1;
for(int i=1;i<=n;i++)
{
a[i]=i;
}
int len=0;
while(n>1)
{
k++;
if(k>sum)
k=1;
if(a[k]!=0)
len++;
if(len==m)
{
if(a[k]!=0)
{
a[k]=0;
n--;
len=0;
}
}
}
for(int i=1;i<=sum;i++)
{
if(a[i]!=0)
{
cout<<i;
break;
}
}
return 0;
}