有100个瓶子,编号1-100,现在有人拿枪开始射击,每隔一个射击瓶子,持续循环,一直到一轮完成,接着在剩下的瓶子里面再次直到最后剩一个瓶子结束。

问题:
有100个瓶子,编号1-100,现在有人拿枪开始射击,从第一号瓶子开始,每枪按顺序击破一个,跳过一个,再击破一个,跳过一个,一直到一轮完成,接着在剩下的瓶子里面再次按顺序击破第一个,间隔一个再击破一个,持续循环,直到最后剩一个瓶子结束。

解析:
先定义1到100的数组
然后思路是删掉奇数位上的数字
问题主要在for循环上
实际在for循环中每次删掉一位后数组回减一,所以不能用人的思考去简单想删掉所有在奇数位上的数字
例如第一次循环1到100第一次删掉a[0](0即实际的奇数1位),
第二次循环时原本的a[2](即实际3位)变成了a[1](即实际的2位)
。。。。。。。
所以只需要每次删去(0,n)就可。

代码示例:

a = []
for i in range(1, 101):
    a.append(i)               #定义一个1到100的数组
while len(a) > 1:             #留下最后一个瓶子
    if len(a)%2==0:           #长度为偶数奇数时所删长度不同
        n=int((len(a)-1)/2)
    else:
        n=int((len(a)+1)/2)
    for j in range(0, n):     #删去位置为奇数位的数字,实际按顺序删掉即可
        del a[j]
print(a)

更多大学课业实验实训可关注公众号:Time木
回复相关关键词
学艺不精,若有错误还望指点

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Time木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值