【无标题】

  1. 定义函数解决约瑟夫环问题:
    一群小朋友(数量为 n)围坐一圈,从第 k 个(默认 k=0)小朋友开始数数,从 1 开始数到 m(默认为 3),数字为 m 的小朋友退出,然后下面的小朋友继续从 1 开始数,当一圈数完以后,第一个小朋友接着最后一个小朋友的数字继续,一直到只剩下一个小朋友,请问最后一个留下的是开始编号为多少的小朋友?
    要求:为函数增加说明部分(使用 help 可查看);函数的返回值为小朋友的编号;可使用递归(不推荐)。
def func(n, k=0, m=3):
    """
    定义函数解决约瑟夫环问题
    @param n: 小朋友总数
    @param k: 从第 k 个开始
    @param m: 从 1 数到 m 退出该小朋友
    @return: 最后留下的编号
    """
    lst = list(range(0, n))
    cnt = 1  # 记录当前数了多少个,当为 m 的倍数时要挑出一个小朋友
    cnt_rest = n  # 记录当前还剩下多少小朋友,当只有一个时退出循环
    flag = True  # 表示当 cnt 有加 1 时才做判断
    while cnt_rest != 1:
        if cnt % m == 0 and flag is True:
            lst[k] = -1
            cnt_rest -= 1
        k += 1
        if k >= n:
            k = 0
        if lst[k] != -1:
            cnt += 1
            flag = True
        else:
            flag = False
    return list(filter(lambda x: x != -1, lst))


print(func(3))

  1. 定义一个高阶函数,用于计算传入值(任意多个)的阶乘,并返回结果除以 3 余 1 的值。
# 定义一个高阶函数,用于计算传入值(任意多个)的阶乘,并返回结果除以 3 余 1 的值。
def fact(n):
    """
    求阶乘
    @param n: 参数
    @return: 阶乘
    """
    if n == 0 or n == 1:
        return 1
    return n * fact(n - 1)


def func(*nums):
    return list(filter(lambda x: fact(x) % 3 == 1, nums))


print(func(1, 2, 4, 3, 1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海不再神清气爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值