第十天:poj1012(约瑟夫环。。。最近总是它)

对于约瑟夫环的问题,在最近总是碰到,我也不知道为什么,所以从一开始的什么的不懂,到现在有很多方法可以解决了。

对于问题本身:就是一个环形的人圈,然后报数,报到规定的那个数的人就死。

对于这类问题,两种解决方案:
1、模拟法,模拟真实情况,循环,每到规定的数,就死人。
2、递推,根据已有的状况来推递推的公式。
第一种是我一开始做的想法,第二种是我时间超限之后网上搜来的。

下面给出递推公式:
for(int i = 2; i <= total; ++i)
{
last = (last + number) % i;
}
其中total是总人数,number是规定多少个数死一个人,last为最终结果。

但是对于这道题,因为这个规律只能知道最后一个存活的人,但是题目要求是存活一半的人,所以不适用。
然后我的解决方案是:利用这个公式去判断,然后加上模拟,最后打表,
因为测试数据只有13个而已,打表还是挺快的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值