问题:
有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木
回复相关关键词
学艺不精,若有错误还望指点