题目
问题描述
给定 n 个整数 1,2,⋅⋅⋅,a1,a2,⋅⋅⋅,an ,求它们两两相乘再相加的和,即:
S=a1⋅a2+a1⋅a3+⋯+a1⋅an+a2⋅a3+⋯+an−2⋅an−1+an−2⋅an+an−1⋅an
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 1,2,⋯,a1,a2,⋯,an。
输出格式
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
思路
暴力肯定会超时,寻找数学规律,也就是提取公因式。每次循环中 用当前数*该数后面数字的和。发现还是有一半的测试用例超时,看了别人的解题,发现是我使用的sum(data[i+1:])比较耗费时间,使用sum(data)- data[i] 表示其余数字之和,就不会超时了。
代码
import os
import sys
# 请在此输入您的代码
n = int(input())
data = list(map(int, input().split()))
add = 0
s1 = sum(data)
for i in range(n-1):
s1 -= data[i] # 依次减去当前数字,就是剩余数字的和
add += data[i] * (s1)
print(add)
题目
已知大写字母 A 的 ASCII 码为 65,请问大写字母 L 的 ASCII 码是多少?
思路
ASCII码中大写字母是根据字母表依次递增的,因此L = A+11 = 76
代码
import os
import sys
# 请在此输入您的代码
print(ord('L')) # 将字母转化为ASCII码
print(chr(65)) # 将ASCII码转化为对应的字母或数字
Tips
ord()函数和chr()函数,分别对应ASCII码和数字之间的转化