0
点赞
收藏
分享

微信扫一扫

平方和,付账问题(python)

北冥有一鲲 2022-04-02 阅读 58

文章目录

平方和

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明对数位中含有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))

通过截图

在这里插入图片描述

如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ

举报

相关推荐

0 条评论