欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python练习题4.18猴子选大王

程序员文章站 2022-03-25 16:57:50
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?输入格式:输入在一行中给一个正整... ......

一群猴子要选新猴王。新猴王的选择方法是:让n只候选猴子围成一圈,从某位置起顺序编号为1~n号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数n(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

代码如下:(官方代码)

#!/usr/bin/python
# -*- coding: utf-8 -*-

n=int(input())
ls=[i for i in range(1,n+1)]

step=2            #步长
ptr=1

while len(ls) > 1:
  #ptr表示列表中第几个元素,没有第0个元素,只有下标为0的元素
  ptr=(ptr+step-1)%len(ls)+1
  #ptr 是 下一个开始的位数
  del ls[ptr-1]
print(ls[0])

这个程序的难点就在于ptr=(ptr+step-1)%len(ls)+1这句代码,说实话,我现在都不是特别特别明白。

下面是官方讨论链接,大家可看看。

https://www.icourse163.org/learn/zju-1206456840?tid=1450395457#/learn/content?type=detail&id=1214738088&cid=1247847460


读书和健身总有一个在路上