2 条题解
-
0
n=int(input()) numList1=list(range(1,n+1)) numList2=[] idx=1 while len(numList1)>1: for i in range(len(numList1)): numList2.append(idx) idx+=1 if idx>3: idx=1 numList3=[] for i in range(len(numList2)): if numList2[i] !=3: numList3.append(numList1[i]) numList2=[] numList1=numList3 print(numList1[0])
-
0
''' 假设是n=7, 先从头到位报数,报完之后让是报数3的踢出列表 第一轮 首位从1开始报数 编号 1 2 3 4 5 6 7 报数 1 2 3 1 2 3 1 第二轮 由于是模拟围城一圈的效果,所以要接上一轮最后一个数 编号 1 2 4 5 7 报数 2 3 1 2 3 第三轮 编号 1 4 5 报数 1 2 3 第四轮 编号 1 4 报数 1 2 3 第五轮 编号 4 报数 列表就剩一个可以输出 ''' n =int(input()) numlist1 = list(range(1,n+1)) # 存储编号1~n numlist2 = [] # 存储每个人的报数信息 idx =1 #第一次从1开始报数 while len(numlist1)>1: for i in range(1,len(numlist1)+1): numlist2.append(idx) idx +=1 if idx >3: # 超过3就从1开始 idx = 1 numlist3 =[]#临时存放 报数不是3的人对于的编号 for i in range(len(numlist2)): # 人员编号,报数信息的列表索引,一一对应。 if numlist2[i]!=3: # 报数不为3 numlist3.append(numlist1[i]) # 添加对应人员编号 numlist2=[] # 报数清空,开始新的一轮 numlist1=numlist3 #将numList1 指向numlist3,构成循环。 print(numlist1[0])
- 1
信息
- ID
- 1556
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 22
- 已通过
- 11
- 上传者