描述
设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2,…,n。给出一个不超过n的数k,然后从编号为k的人从1开始报数,数到m的人便出列;下一个人(第m+1个)又从容不迫开始报数,报数是m的人是第二个出列的人;如此游戏继续下去,直到最后一个人出列为止。
你的任务是确定最后一个出列的人的编号。
我的想法
约瑟夫环问题,有很多好的博客讲解这个问题了,然而里面的代码或多或少有一些问题,还是把我的代码贴出来。
代码
#include<stdio.h>
int main()
{
int n,m,k,i;
while(scanf("%d %d %d",&n,&m,&k)==3)
{
int s=0;
for(i=2;i<=n;i++)
s=(s+m)%i;
printf("%d\n",s+k==n?n:(s+k)%n);
}
return 0;
}