注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
Python基础练习题37:0的组合
给定一个包含若干个整数(可能存在重复整数)的列表,判断其中是否存在三个元素a,b,c,使得a+b+c=0?找出所有满足条件且不重复的这样的三个数的组合。
输入格式:
共一行,列表中元素以空格隔开。
输出格式:
共一行,为不重复组合的个数,不存在这样的组合就输出0。
输入样例:
-1 0 1 2 -1
输出样例:
2
(注:两个组合是-1,-1,2和-1,0,1)
解答:本题看起来很复杂,但其实只要三个循环遍历,加上筛选条件,其它的交给计算机即可解决问题。
l = list(map(int, input().split()))
l = sorted(l)
t = tuple(l)
l2 = []
for i in range(len(t)):
for j in range(len(t)):
for k in range(len(t)):
if i != j and j != k and k != i and t[i] + t[j] + t[k] == 0: # 列出筛选条件。
l1 = [t[i], t[j], t[k]]
l1 = sorted(l1)
t1 = tuple(l1)
l2.append(t1)
print(len(set(l2)))
Python基础练习题38:乘积的列表
给定一个包含若干个整数的列表alist,要求返回输出列表blist,blist中的元素为除与alist对应位置上的元素之外其余各元素的乘积。
输入格式:
共一行,列表中的元素以空格隔开。
输出格式:
共一行,为一个列表。
输入样例:
1 2 3
输出样例:
[6, 3, 2]
(注:原列表的1,对应输出6 = 2 * 3,原列表的2,对应输出3=1 * 3,原列表的3,对应输出2 = 1 * 2)
解答:计算加法的基础数为0,计算乘法的基础数为1。这题的关键在于第2个列表中的对应数的乘法计算中,要先排除与它的索引相同的数,然后再累计相乘剩下的数。
l1 = list(map(int, input().split()))
l2 = l1[:]
t1 = tuple(l1)
for i in range(len(t1)):
r = 1 # 乘法基础数为1。
for j in range(len(t1)):
if i != j:
r *= t1[j]
l2[i] = r
print(l2)
To be continued.