求和
n = int(input())
l = list(map(int,input().split(" ")))
sum01 = 200000*[0]
sum01[n-2] = l[n-1]
S = 0
for i in range(n-2,-1,-1):
sum01[i] = l[i+1] + sum01[i+1]
for i in range(0,n):
S += sum01[i] * l[i]
print(S)
思路:
假如n=4,S = a1*a2 + a1*a3 + a1*a4 + a2*a3 + a2*a4 + a3*a4。
观察发现可以使用分配率进行化简S = a1*(a2+a3+a4)+a2*(a3*a4)+a3*a4。
所以创建两个列表,一个保存输入的整数,一个保存每个整数对应的括号内的和。
以a2*(a3+a4)来说,一个列表保存a2,一个列表保存(a3+a4),它们对应的索引要相同。
对于列表[a1,a2,a3,a4],它的“括号和列表”为[s1,s2,s3,s4]。首先将括号和列表全赋值为0,此时发现只要将s4赋一个实际值,就可以表示s3,s2,s1(代码行6~7)
最后再使用一个循环,将两个列表相同索引的元素取出来相加,最后就可以得到题目要的S值!
注意的点
如何在Python中通过map函数做到在一行中输入多个元素
str.split(“ ”)返回的是一个列表型