Python编程实现500个人围成一圈 python围圈数数_Python编程实现500个人围成一圈

目录

python围圈报数

一、题目要求

1、编程实现

2、输入输出

3、评分标准

二、解题思路

1、案例分析

2、流程分析

三、程序代码

四、运行结果

五、考点分析


python围圈报数

2020年青少年组python蓝桥杯省赛模拟题

一、题目要求

1、编程实现

有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子。然后继续从1到3报数,指导最后留下一个人游戏结束,问最后留下的人原来排在第几号。

2、输入输出

输入样例:(以下提示信息是程序输出内容)

输入数字:5

输出样例:

4

3、评分标准

6分:能正确输出一组数据

6分:能正确输出两组数据

6分:能正确输出三组数据

二、解题思路

1、案例分析

  1. 题目对小朋友们来说还是有一点难度,难在如何处理这个圈
  2. 方式方法有多种,小兔子老师这把采用的是将1到n这些数放在一个列表
  3. 然后在复制一个同样的列表用来进行报数,如果是3的倍数就删除原先列表中对应的值
  4. 一直重复这样直到原先列表中的项为1项就结束,然后输出就是最后一个人

2、流程分析

  1. 利用input函数从键盘获取输入的人数n
  2. 利用int函数强制将输入的人数n转化成整型
  3. 将1到n所有数字存放到人数列表中
  4. 接着声明一个存放报数的变量
  5. 利用while循环直到人数列表为1
  1. 复制人数列表
  2. 利用for循环遍历复制的列表
  1. 计数加1
  2. 判断计数是否是3的倍数,如果是将人数列表中对应的复制列表中的值踢出

三、程序代码

n=int(input('输入数字:'))
#建立一个列表,存放的1到n的号码数
person_list = list(range(1,n+1))
count = 0;#存放报的数字

while len(person_list)>1:
	per_copy = person_list[:]#复制列表
	for i in range(0,len(per_copy)):
		count += 1
		if count%3 == 0:#如果报3,则去除a中的这一位
			person_list.remove(per_copy[i])
            
print(person_list[0])

四、运行结果

输入数字:5
4

输入数字:12
10

输入数字:20
20

五、考点分析

难度级别:难,这题相对而言还是有一点小难度,难在产生列表和输出对应图形,具体主要考查如下:

  1. 分析题目,找到对应的解题思路
  2. input函数:Python 中 input() 函数接受一个标准输入数据,返回为 string 类型。
  3. int函数:强制将参数转化成整型对象
  4. 熟练掌握列表对应的操作
  5. while循环:条件成立执行循环体,否则结束循环
  6. for循环:for循环可以遍历任何有序的项及列表元素等等。
  7. range函数:rang(a,b),循环的时候是不包括b的,所以我们这个案例中要转变一下,要想包含b,就应该写成range(a,b+1)
  8. if:条件分支语句的使用
  9. print函数:用于打印输出,最常见的一个函数。
  10. 充分掌握while循环、for循环和列表相关操作函数的使用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!