约瑟夫环问题

最近,一直学习C语言,今天有同学问我关于约瑟夫环的问题,顿时被难倒了,不过,我的倔强让我花了一小时终于搞懂了。。广大学习C语言的孩子是不是有同样的感觉。

Description 

有一次,明明的公司举行忘年会。忘年会的高潮部分是最后的抽大奖环节。公司为了增加活动的气氛,并没有按传统的抽奖方式来抽,而是进行了一个游戏:逐步逐步地淘汰人,而最后剩下的人,将会得到大奖。这个游戏的方式如下:首先公司的全部职员围成一个圈,然后确定一个淘汰数X,接着就从其中的一个人开始,从1数数,当数到X时,那个人就被淘汰出局,接着下一个人再从1开始数数,一直这样重复下去,直到剩下最后一个人,那个人就是最后的大奖得主。

例如,公司有5个人,淘汰数定为2,则一开始五个人排成一圈,依次编号为:1、2、3、4、5;
首先从编号1的人开始数数,数到2后,编号2淘汰,这样只剩下4个人:1、3、4、5;
接着从编号3的人开始数,数到2后,编号4淘汰,这样只剩下3个人:1,3、5;
接着从编号5的人开始数,数到2后,编号1淘汰,这样只剩下2个人:3、5;
最后从编号为5的人开始数,数到2后,编号5淘汰,最后编号为3的那个人就获得了最终的大奖。
(注:以上的淘汰顺序为2 4 1 5 3。)

由于明明的运气十分地差,最后第二个被淘汰,与大奖失之交臂,十分郁闷。他想知道自己被淘汰的全过程,于是他想请你帮个忙,帮他写一个程序,明明把他公司的人数告诉你,并且把那个淘汰数也告诉你,你的程序能够根据这两个数计算出淘汰人的具体顺序,即把淘汰人的编号按顺序输出。

明明的问题可以归结为:给你一个公司的人数N和一个淘汰数X,你的程序模拟上面描述的淘汰方式,输出淘汰人的编号顺序。


ps:万恶的明明! 发火


代码如下:

这里说明一下index是当前开始报数的位置,step是间隔的人数,count是出局的人数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值