注:本文所有代碼均經(jīng)過Python 3.7實際運行檢驗,保證其嚴謹性。
Python基礎(chǔ)練習題37:0的組合
給定一個包含若干個整數(shù)(可能存在重復整數(shù))的列表,判斷其中是否存在三個元素a,b,c,使得a+b+c=0?找出所有滿足條件且不重復的這樣的三個數(shù)的組合。
輸入格式:
共一行,列表中元素以空格隔開。
輸出格式:
共一行,為不重復組合的個數(shù),不存在這樣的組合就輸出0。
輸入樣例:
-1 0 1 2 -1
輸出樣例:
2
(注:兩個組合是-1,-1,2和-1,0,1)
解答:本題看起來很復雜,但其實只要三個循環(huán)遍歷,加上篩選條件,其它的交給計算機即可解決問題。
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基礎(chǔ)練習題38:乘積的列表
給定一個包含若干個整數(shù)的列表alist,要求返回輸出列表blist,blist中的元素為除與alist對應(yīng)位置上的元素之外其余各元素的乘積。
輸入格式:
共一行,列表中的元素以空格隔開。
輸出格式:
共一行,為一個列表。
輸入樣例:
1 2 3
輸出樣例:
[6, 3, 2]
(注:原列表的1,對應(yīng)輸出6 = 2 * 3,原列表的2,對應(yīng)輸出3=1 * 3,原列表的3,對應(yīng)輸出2 = 1 * 2)
解答:計算加法的基礎(chǔ)數(shù)為0,計算乘法的基礎(chǔ)數(shù)為1。這題的關(guān)鍵在于第2個列表中的對應(yīng)數(shù)的乘法計算中,要先排除與它的索引相同的數(shù),然后再累計相乘剩下的數(shù)。
l1 = list(map(int, input().split()))
l2 = l1[:]
t1 = tuple(l1)
for i in range(len(t1)):
r = 1 # 乘法基礎(chǔ)數(shù)為1。
for j in range(len(t1)):
if i != j:
r *= t1[j]
l2[i] = r
print(l2)
To be continued.