解题思路:本题可以将所有的人从1到m设置好序号,然后放到列表里面,序号存在表示该人尚未出圈,每次遍历时index更新为(index+(m-1))%len(c),保证下标在超过范围时能够正确判断,每一次都进行判断删除直到列表长度为1时停止,此时列表中的唯一的序号c[0]就是所求的最后一个人的初始编号
注意事项:(index+(m-1))%len(c),下标的更新公式,不嫌麻烦的话也可以每遍历一边列表就将剩下的序号都加上n,做个变量记录加了几次,最后输出的时候减掉;另外这道题是有多组测试用例,所以要考虑无输入时退出循环,个人建议还是用try-except,这个比较好用
参考代码:
while True:
try:
a,b=map(int,input().split())
if a==0:
break
c=[i for i in range(1,a+1)]
index=0
while len(c)>1:
index=(index+b-1)%len(c)
del c[index]
print(c[0])
except EOFError:
break
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:748 |
【回文数(二)】 (C语言代码)浏览:943 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:716 |
2005年春浙江省计算机等级考试二级C 编程题(3) (C语言代码)浏览:417 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:504 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:699 |
妹子杀手的故事 (C语言代码)浏览:1197 |
模拟计算器 (C语言代码)浏览:2371 |
简单的a+b (C语言代码)浏览:683 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:416 |