Python 练习实例69
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
程序分析:无。
程序源代码:
实例(Python 2.0+)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
nmax = 50
n = int(raw_input('请输入总人数:'))
num = []
for i in range(n):
num.append(i + 1)
i = 0
k = 0
m = 0
while m < n - 1:
if num[i] != 0 : k += 1
if k == 3:
num[i] = 0
k = 0
m += 1
i += 1
if i == n : i = 0
i = 0
while num[i] == 0: i += 1
print num[i]
执行以上代码,输出结果:
$ python test.py 请输入总人数:34 10
Python 100例
朦胧
253***5732@qq.com
参考方法:
# coding:utf-8 n=int(input("输入人数:")) List=[] for i in range(1,n+1): List.append(i) sum=0 while 1: t=0; for i in range(1,len(List)+1): sum=sum+1 if (sum)%3==0: List.pop(i-1-t) t=t+1 if len(List)==1: print("最后留下的是原来第%d号的那位" % List[0]) break朦胧
253***5732@qq.com
helloworld
hel***ord@qq.com
参考方法:
#!/usr/bin/python # -*- coding: UTF-8 -*- data = [i+1 for i in range(20)] print(data) i = 1 while len(data) > 1: if i % 3 == 0: data.pop(0) else: data.insert(len(data),data.pop(0)) i += 1 print(data)helloworld
hel***ord@qq.com
薄荷可乐
r49***7365@163.com
参考方法:
#coding=utf-8 from collections import deque #添加进列表 a=[] n=input('请输入几个人:') for i in range(1,n+1): a.append(i) b=deque(a) # 使用双段队列deque,目的是使用里面的方法回转rotate #创建删除符合3的数并且回转列表 while True: b.remove(b[2]) #删除为3的数也就是索引为2的数 b.rotate(-2) #将第三个数后面的数进行回转从头开始 if len(b)==2: print b[1] #最后剩两个数,那么最后的人一定是最后一个数 break薄荷可乐
r49***7365@163.com