前一篇文章最后一个算法校正

前一篇文章最后一个算法的实现有一点问题,问题原因来自python中list删除数据会导致数据前移,针对这个特性目前没有一个很好的解决方案,所以在这里使用另外一个角度去实现,即将报到9的人编号置为0,在下次喊的时候,让为0的结果直接pass即可。里边还有一个设置状态量让while循环退出的思想。

#从30个人中选择15个,所有人围成一圈数1-9的数,喊到9的人出列即可
#让每个人报数,按照1-9对每次报数的人进行记录,将报到9的人剔除即可(在这里其实也是用基础的排序,即30人的编号作为起始的编号,主要信息:初始化编号和每个人所报数字,且每报到9后需要重新从1开始报数)
import sys
def nine_retire():
    origin_num = [i for i in range(1,31)]
    temp_list = []
    s = 1
    while_state = 1
    #逻辑本身还是有问题,应该是每删除一次,就行判断一次,否则会有隐患存在
    # while len(temp_list) <= 15:
    while True:
        if while_state == 0:
            break
        else:
            for j in origin_num:
                if len(temp_list) == 15:
                    while_state = 0
                    break
                else:
                    if s == 9 and j != 0:
                        temp_list.append(j)
                        origin_num[origin_num.index(j)] = 0
                        s = 1
                    elif j == 0:
                        pass
                    else:
                        s += 1
    print(temp_list)
    print(len(temp_list))
    print([i for i in origin_num if i != 0])

if __name__ == '__main__':
    nine_retire()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值