文章目录
平方和
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明对数位中含有2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574,平方和是 14362。
注意,平方和是指将每个数分别平方后求和。
请问,在 1 到 2019 中,所有这样的数的平方和是多少?
运行限制
最大运行时间:1s
最大运行内存: 128M
分析
- 将数字遍历,转化成字符通过in看是否存在某个字符,如果存在,进行相应操作。
运行代码
ans = 0
for i in range(1,2020):
i = str(i)
if "2" in i or "0" in i or "1" in i or "9" in i:
ans+=int(i)*int(i)
print(ans)
通过截图
付账问题
几个人一起出去吃饭是常有的事。但在结帐的时候,常常会出现一些争执。
现在有n个人出去吃饭,他们总共消费了 S 元。其中第 i 个人带了ai元。幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了:每个人分别要出多少钱呢?
为了公平起见,我们希望在总付钱量恰好为 S 的前提下,最后每个人付的钱的标准差最小。这里我们约定,每个人支付的钱数可以是任意非负实数,即可以不是 1 分钱的整数倍。你需要输出最小的标准差是多少。
标准差的介绍:标准差是多个数与它们平均数差值的平方平均数,一般用于刻画这些数之间的"偏差有多大"。形式化地说,设第 i 个人付的钱为 bi元,那么标准差为 :
分析
运行代码
import math
n,s = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
b = 0 # 存储方差
ave = s/n # 平均数
new = ave # 过程中产生的新平均数
for i in range(n):
if a[i] < new:
b+=pow(a[i]-ave,2)
s-=a[i] # 更新总数
new = s/(n-i-1) # 更新平均值
else:
b+=(n-i)*pow(new-ave,2)
break
res = math.sqrt(b/n)
print("{:.4f}".format(res))
通过截图
如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ