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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值