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

A50042. 现有 n 个人依次围成一圈玩游戏, 从第 1 个人开始报数, 数到第 m 个人出局, 然后从出局的下一个人开始报数, 数到第 m 个人又出局, ..., 如此反复到只剩下最后一个是胜利者。设 n 个人的编号分别为 1, 2, ..., n, 打印出局的顺序。根据上述算法思想, 补全下列代码。输入输出示例: 当 n=10, m=4, 输出如下:出局的人是: 4出局的人是: 8出局的人是: 2出局的…

填空题 中等

题目描述

现有 n 个人依次围成一圈玩游戏, 从第 1 个人开始报数, 数到第 m 个人出局, 然后从出局的下一个人开始报数, 数到第 m 个人又出局, ..., 如此反复到只剩下最后一个是胜利者。

设 n 个人的编号分别为 1, 2, ..., n, 打印出局的顺序。

根据上述算法思想, 补全下列代码。

输入输出示例: 当 n=10, m=4, 输出如下:

出局的人是: 4

出局的人是: 8

出局的人是: 2

出局的人是: 7

出局的人是: 3

出局的人是: 10

出局的人是: 9

出局的人是: 1

出局的人是: 6

最后胜利者是: 5

def fun(n,k):

  L = list(①)

  if n == 1:

    return

  else:

    x = 0

    for i in ② :

      x = ③ - 1

      print('出局的人是:',L[x])

      del L[x]

      if x < 0:

        x = 0

    print('最后胜利者是:',④)

fun(10,4)

参考答案

def fun(n,k): L = list(range(1,n+1)) if n == 1: return else: x = 0 for i in range(n-1): x = (x + k) % len(L) - 1 print('出局的人是:',L[x]) del L[x] if x < 0: x = 0 print('最后胜利者是:',L[0]) fun(10,4)

答案解析

评分标准: 

① range(1,n+1) 或等效答案;(3 分)

② range(n-1): 或等效答案;(3 分)

③ (x + k) % len(L) 或等效答案;(3 分)

④ L[0] 或等效答案;(3 分)

上一题 下一题