小白备战蓝桥杯打卡03

求和

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)

思路:

  1. 假如n=4,S = a1*a2 + a1*a3 + a1*a4 + a2*a3 + a2*a4 + a3*a4。

  1. 观察发现可以使用分配率进行化简S = a1*(a2+a3+a4)+a2*(a3*a4)+a3*a4。

  1. 所以创建两个列表,一个保存输入的整数,一个保存每个整数对应的括号内的和。

  1. 以a2*(a3+a4)来说,一个列表保存a2,一个列表保存(a3+a4),它们对应的索引要相同。

  1. 对于列表[a1,a2,a3,a4],它的“括号和列表”为[s1,s2,s3,s4]。首先将括号和列表全赋值为0,此时发现只要将s4赋一个实际值,就可以表示s3,s2,s1(代码行6~7)

  1. 最后再使用一个循环,将两个列表相同索引的元素取出来相加,最后就可以得到题目要的S值!

注意的点

  1. 如何在Python中通过map函数做到在一行中输入多个元素

  1. str.split(“ ”)返回的是一个列表型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值