求和&&ASC

文章讨论了一种数学优化方法来计算一组整数两两相乘后相加的和,避免了暴力求解导致的时间超时问题。通过提取公因式和优化求和表达式,可以提高算法效率。同时,文章提到了ASCII码的计算,指出大写字母L的ASCII码是基于字母表顺序从A开始递增的,L的ASCII码为76。
摘要由CSDN通过智能技术生成

题目

问题描述

给定 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码和数字之间的转化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值