看下题:
n个人站成一圈(n<20),逆时针编号为1~n.有两个官员,a从0逆时针数,b从n开始顺时针数.在每一轮中,官员a数k个就停下来,官员b数m个就停下来(注意有可能两个官员在同一个人上)。接下来被官员选中的人(1或2人)离开队伍.
输入n,k,m输出每轮里被选中的人的编号(如果有两个人,先输出被a选中的)。
例如,n=10,k=4,m=3
输出为4 8,9 5,3 1,2 6,10,7.注意:每轮输出的数应当恰好占3列.
[样例运行结果如图]
[代码]
def go(nlist, p, d, t):
# p from 0 to leng-1
# d = 1 or -1
np = p
leng = len(nlist)
idlist =[]
for _ in range(t):
while true:
if nlist[np]>0:
idlist.append(np)
break
else:
np = (np + d + leng) % leng # np 递增或递减, 并循环
np = (np + d + leng) % leng
return idlist[-1]
def main():
ans=[]
nkm = input(please input n k m:)
nkm = [x.strip() for x in nkm.split()]
while true:
try:
n,k,m = [int(x) for x in nkm]
break
except:
print(try again: input n k m:)
nlist = list(range(1,n+1))
left = n
pa = 0 #a官员的逆时针起点
pb = n-1 #b官员的顺时针起点
while left:
pa = go(nlist, pa, 1, k)
pb = go(nlist, pb, -1, m)
if pa==pb:
print({}.format(nlist[pa]), end=)
nlist[pa]=0
left-=1
else:
print({} {}.format(nlist[pa], nlist[pb]), end=)
nlist[pa], nlist[pb] = 0,0
left -= 2
if left>0:
print(,, end=)
print()
# print(nlist)
if __name__==__main__:
main()
好的,就到这里吧。
无锡童程童美少儿编程培训学校学习资源比较齐全,课程体系丰富,拥有来自国内外名企、名校的师资教研团队,17年编程教育经验沉淀,累计研发超5000课时,打造了适合中国孩子各年龄段的编程课堂。速来加入童程童美,让孩子离伟大更近一步!