目录
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到n这些数放在一个列表
- 然后在复制一个同样的列表用来进行报数,如果是3的倍数就删除原先列表中对应的值
- 一直重复这样直到原先列表中的项为1项就结束,然后输出就是最后一个人
2、流程分析
- 利用input函数从键盘获取输入的人数n
- 利用int函数强制将输入的人数n转化成整型
- 将1到n所有数字存放到人数列表中
- 接着声明一个存放报数的变量
- 利用while循环直到人数列表为1
- 复制人数列表
- 利用for循环遍历复制的列表
- 计数加1
- 判断计数是否是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
五、考点分析
难度级别:难,这题相对而言还是有一点小难度,难在产生列表和输出对应图形,具体主要考查如下:
- 分析题目,找到对应的解题思路
- input函数:Python 中 input() 函数接受一个标准输入数据,返回为 string 类型。
- int函数:强制将参数转化成整型对象
- 熟练掌握列表对应的操作
- while循环:条件成立执行循环体,否则结束循环
- for循环:for循环可以遍历任何有序的项及列表元素等等。
- range函数:rang(a,b),循环的时候是不包括b的,所以我们这个案例中要转变一下,要想包含b,就应该写成range(a,b+1)
- if:条件分支语句的使用
- print函数:用于打印输出,最常见的一个函数。
- 充分掌握while循环、for循环和列表相关操作函数的使用
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!