+7 投票
分类:问答挑战 | 用户: 10 9 8 (5.7k 分)

编写一个函数,该函数接受两个参数,分别是一个列表和一个整数。函数需要返回列表中所有数字相加之后能够被给定整数整除的最短子列表(即其中元素的总和为整数的倍数)。如果没有这样的子列表,则返回空列表。 

例如,对于输入 [4, 3, 6, 7, 2, 1] 和整数 5,函数应该返回 [7, 2, 1],因为它们的和为 10,正好是 5 的倍数。如果输入是 [4, 3, 6, 7, 2, 1] 和整数 9,则函数应该返回 [3, 6],因为它们的和为 9,也是 9 的倍数。

注意:在找到符合要求的最短子列表时,子列表中的元素顺序必须与原列表中顺序相同。

1个回答

+2 投票
用户: 9 4 3 (2.5k 分)
采纳于 用户:
 
已采纳

不知道是不是我理解错了,对于输入 [4, 3, 6, 7, 2, 1] 和整数 5,返回[6,7, 2]也满足条件;输入是 [4, 3, 6, 7, 2, 1] 和整数 9,返回 [7, 2]也满足条件;题干没有说清楚返回的子列表不唯一的时候函数应该返回什么。

暴力破解,找到第一个满足要求的子序列:

def get_list(input_list, integer):
    if input_list[0] == integer:
        return [integer]
    sum_list = [input_list[0]]
    length = len(input_list)
    for i in range(1, length):
        if input_list[i] == integer:
            return [integer]
        sum_list.append(sum_list[i-1] + input_list[i])
    for i in range(2, length):
        for j in range(length):
            if j + i < length:
                if (sum_list[j+i] - sum_list[j]) % integer == 0:
                    return input_list[j+1:j+i+1]
            else:
                break
    return []
欢迎来到 在线问答系统 ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...