约瑟夫问题二
提交数: 607, 通过率: 56.34%, 平均分: 63.13
题目描述:
n 个人排成一圈,从某个人开始,按顺时针方向从 1 开始依次编号。从编号为1的人开始顺时针“ 1,2,3,…,m,1,2,3,… ”报数,报到 m( m>1 )的人退出圈子。这样不断循环下去,圈子里的人数将不断减少。由于人数是有限的(n个),因此最终会只剩下一个人。试问最后剩下的人的初始编号是多少?
输入格式:
两个整数,n和m。
输出格式:
一个整数,表示最后剩下的人的初始编号。
数据范围:
m, n <= 1000。
样例输入:
10 3
样例输出:
4
提示:
下面程序用链表实现,请完善该程序。
n, m = map( int, input().split() )
lst = []
for i in range( n ):
lst.append( _____________ ) #填空1
_______________________ #填空2
head = 0
cnt, tot = 0, 0
q = p = head
while tot < n-1:
cnt += 1
if cnt == m:
tot += 1
_____________________ #填空3
___________________ #填空4
cnt = 0
else:
q = p
_____________ #填空5
print( ______________ ) #填空6
时间限制: 1000ms空间限制: 256MB
来源: 选修1教材-P49