Python练习——— 0的组合

题目内容:

给定一个包含若干个整数(可能存在重复整数)的列表,判断其中是否存在三个元素a,b,c,使得a+b+c=0?找出所有满足条件且不重复的这样的三个数的组合。

 

输入格式:

共一行,列表中元素以空格隔开。

 

输出格式:

共一行,为不重复组合个数,不存在这样的组合就输出0

 

输入样例:

-1 0 1 2 -1

 

输出样例:

2

(注:两个组合是-1,-1,2和-1,0,1)

时间限制:500ms内存限制:32000kb

 

思路:

1.找出所有符合条件的组合

2.通过集合控制元素不重复

这里稍微要注意一下的是,集合的元素是一个数字组合,(-1,0,1)(0,1,-1)不是同一个元组,但是算作同一个数字组合,所以要对元素进行排序一下。可以在最开始就对输入的元素列表alist进行排序,也可以对元组内元素排序。

如果是对元组进行排序,需要注意的是,对元组进行sorted()操作后,元组会变成列表,而变成列表后就无法加入集合中了,系统会提示:

a = (1, 3, 2)
b = sorted(a)
print(b)
>> [1, 2, 3]

TypeError: unhashable type: 'list'

最后代码:

alist = list(map(int, input().split()))
aset = set()

for i in range(len(alist)-2):
    for x in alist[i+1:-1]:
        for y in alist[i+2:]:
            s = alist[i] + x + y
            if s == 0:
                aset.add(sorted((alist[i], x, y)))
print(len(aset))

 或者:

# 在最开始对列表排序
alist = list(map(int, input().split()))
alist.sort()
aset = set()

for i in range(len(alist)-2):
    for x in alist[i+1:-1]:
        for y in alist[i+2:]:
            s = alist[i] + x + y
            if s == 0:
                aset.add((alist[i], x, y))
print(len(aset))

 

你可能感兴趣的:(Python练习——— 0的组合)