标签:dba 顺时针 map div 第一个 cal 格式 rgb cin
试题编号: | 201712-2 |
试题名称: | 游戏 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该小朋友获胜。 例如,当n=5, k=2时: 1号小朋友报数1; 2号小朋友报数2淘汰; 3号小朋友报数3; 4号小朋友报数4淘汰; 5号小朋友报数5; 1号小朋友报数6淘汰; 3号小朋友报数7; 5号小朋友报数8淘汰; 3号小朋友获胜。 给定n和k,请问最后获胜的小朋友编号为多少? 输入格式 输入一行,包括两个整数n和k,意义如题目所述。 输出格式 输出一行,包含一个整数,表示获胜的小朋友编号。 样例输入 5 2 样例输出 3 样例输入 7 3 样例输出 4 数据规模和约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。 |
用到两个列表和一个计数器。计数器用来记录当前小朋友的报数。第一个列表用来装没有报数的小孩。第二个列表用来装报数并且不是k的整数倍的小孩。当第一个列表循环完一遍以后,把第二个列表重新复制给第一个列表。然后第二个列表置空。然后循环第二遍。当第一个列表长度是1时停止循环。然后输出当前小孩的序号。
注意:用range生成时,Python3是生成一个迭代器。所以需要用list来实际在内存生成这个列表。然后是这个列表的每个元素对应的小孩应该是这个数字加1才是小孩的真正序号。
以下提交20分: L = list(map(int,input().split())) n, k = L[0], L[1] li = list(range(n)) c = 1 while len(li) > 1: li1 = [] for i in range(len(li)): if c%k==0: c += 1 else: li1.append(li[i]) c += 1 li = li1[:] print(li[0]+1)
标签:dba 顺时针 map div 第一个 cal 格式 rgb cin
原文地址:https://www.cnblogs.com/mehome/p/9531292.html