约瑟环问题:有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的人退出圈子;然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。
编写程序,模拟上述游戏,要求初识人数n和报数临界值k可以自由指定。运行程序并观察游戏进行过程(请使用列表完成)。
代码如下:
x=input("请输入人数n以及报数临界值k:")
n,k=map(int,x.split(' '))
num=[i for i in range(1,n+1)]
flag=0
count=0
while len(num)!=1:
for i in num:
flag+=1
if flag == k:
flag=1
count+=1
num.remove(i)
print("At time [{0}]: {1} out {2}".format(count,num,i))
print("The final one is ",num)
运行结果:
这里需要注意的是:
1.从键盘输入值时,如果输入多个值用空格分隔,可以使用.split(‘ ‘)函数将其根据空格分割,若使用其他符号,该函数参数即是该符号,再通过map函数转换即可,这一方法对于多输入较为方便;
2.将某一元素从列表中删除,可以使用list.remove()函数,是删除首次出现需要删除的元素,该题中需要注意将元素删除后,后面的元素会往前移一个,因此,重置flag参数的值应设为1;