SHUOJ报数问题

描述

设有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;
}

猜你喜欢

转载自blog.csdn.net/waveviewer/article/details/76152529