约瑟夫环
约瑟夫环
https://ac.nowcoder.com/acm/contest/19306/1003
https://ac.nowcoder.com/acm/contest/19306/1003
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是
1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时
候,那个人就是大王。现在,给定n,k,m,
请你求出大王的编号。
输入描述:
输入一行包含三个整数n,k,m
1<=n<=100,1<=k<=n-1,1<=m<=100
输出描述:
输出一个整数
示例1
输入
5 1 2
输出
#include <stdio.h>
int main()
{
int n,k,m;
scanf("%d%d%d",&n,&k,&m);
int a[100]={0};
int t=0,q=0,i=k-1;
while(1)
{
i++;
if(a[i]!=-1){
t++;
if(t==m)
{
a[i]=-1;
q++;
t=0;
}
}
if(q==n-1) break;
if(i==n-1) i=-1;
}
for(int i=0;i<n;i++)
if(a[i]!=-1) {
printf("%d",i);
break;
}
}