174:付账问题
n, s = map(int, input().split())
exp = sorted(list(map(float, input().split())))
ave = s / n
sat = 0
for i in range(n):
# 检查当前的人的花费乘以包括当前消费者以后的客户的人数是否小于等于预算s
if exp[i] * (n - i) <= s:
# 如果是真的,更新sat,添加当前花费与平均值之间的差的平方
sat += (exp[i] - ave) ** 2
# 更新预算,减去当前花费
s -= exp[i]
else:
# 如果是假的,计算预算除以剩余人数的平均值,并更新sat,添加这个平均值与平均值之间的差的平方乘以剩余人数
sat += (s / (n - i) - ave) ** 2 * (n - i)
break
print("%.4f" % (sat / n) ** (1 / 2))
思路:对输入的消费记录排序,穷的先付帐,当当前的预算不足以让下一个人付账时就是最小标准差
502:成绩分析
n = int(input())
exam = [0] * n
ok = 0
unok = 0
for i in range(n):
exam[i] = int(input())
if exam[i] >= 60:
ok += 1
if exam[i]>=85:
unok += 1
ansok = round((ok / n)*100)
ansunok = round((unok / n)*100)
print(str(ansok) + '%')
print(str(ansunok) + '%')
思路:暴力枚举