救济金发放的解决

       救济金的问题抽象出来就是几个人围成一个圈坐,给每一个人编号,一个人从1开始,一个人从n开始,从一开始的点到k时,出列一人,n逆时针点人,点到m出列一人。如果我们出列用删除操作,则大大的降低了效率,我们将删除掉的人用0来代替,当我们遇到0时不点人。

     使用两个方法来分别逆时针顺时针点人,如果是0,则跳过


,每一次点相应的人数,这就涉及到我们点到第某人时,某一是0的情况,所以每一次我们点完人,(即某一次点人算数)都要去判断这一次的点人是否有效,也就是是不是点到了正确的人,如果第某次点人,点到的是0,即无效,要向下过滤至有效的一个人。

     转圈,因为一堆人是围着圈坐的,所以当偶们点到最后一个人n时,我们要从新从第一个人开始点名,其中每一次点名都要判断是否我们到达最后一人,同是对于逆时针点人的我们每一次都要判断是否到达队的首端。

 然后做输出。

    在这次的练习中仍然存在的不足有:

    对于vim的分屏操作不熟练,有待加强,对于调试的s,n到底该一次执行一条指令还是多条指令不清楚。调试效率低。

经验:

    对于数数的操作:while(n--)执行的循环次数是n次;

                            当p指向的是当前的位置m时,数k个人后,当前的位置应该是k+m;也就是执行k次循环。

                             当我们点人时从1开始点人的话,点到k人应该是0+k;

                            对于数组的使用我们在实操时往往会选择比题目预设大1;

     今天看了刘老师的解法,可以使用一个方法来实现,我们数数时,在起始位置时,由于是一个圆圈,我们可以设置从一数的时候从最后一个位置起始,从最后位置数数的从起始位置起。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值