测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A46046. 约瑟夫问题是个有名的问题:N 个人围成一圈,顺序为 0,1,2,3,4,5,从 0 号这个人开始报数,报到 2 的将被杀掉,接下去重新开始报数,报到3 的将被杀掉...以此类推,最后剩下一个,其余人都将被杀掉。例如N=6,被杀掉的顺序是:1,4,3,0,5;最后只剩下 2 这个人。

填空题 中等

题目描述

约瑟夫问题是个有名的问题:N 个人围成一圈,顺序为 0,1,2,3,4,5,从 0 号这

个人开始报数,报到 2 的将被杀掉,接下去重新开始报数,报到3 的将被杀掉...以此类

推,最后剩下一个,其余人都将被杀掉。例如N=6,被杀掉的顺序是:1,4,3,0,5;最后只剩下 2 这个人。

参考答案

llist= n=int(input(“请输入参与人数:”)) for i in range(0,n-1): llist.append([i,i+1]) llist.append([n-1,0]) head=0 long=n k=head i=1 p=2 while(long>1): if i==p-1: t=llist[k][1] print(llist[t][0])#索引为 t 的删除 head=llist[k][1] if t==head: llist[k][1]=llist[t][1] i=1 p+=1 long=long-1 k=llist[k][1] k=llist[k][1] i+=1 print(llist[head][0])
上一题 下一题