今日复习内容:做题
例题1:付账问题
问题描述:
几个人一起出去吃饭是常有的事,但在结账的时候,常常会出现一些争执。
现在有n个人出去吃饭,他们总共消费了S元,其中第i人带了ai元。幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了,每个人分别要出多少钱呢?
为了公平起见,我们希望在总钱数是S的情况下,最后每个人付的钱的标准差最小。这里我们约定,每个人支付的钱数可以是任意整数,即不一定是1分钱的整数倍。你需要输出最小的标准差的多少?
输入描述:
第一行包含两个整数n和S;
第二行包含n个非负整数a1,a2,a3,...,an。
其中,n <= 5 * 10^5,0 <= ai <= 10^9
输出描述:
输出最小的标准差,四舍五入保留4位小数,保证正确答案在加上10^9或减去10^9后不会导致四舍五入的结果发生变化。
参考答案:
from math import *
n,s = map(int,input().split())
a = list(map(int,input().split()))
a.sort()
avg = s / n
sum = 0
for i in range(n):
if a[i] * (n - i) < s:
sum += pow(a[i] - avg,2)
s -= a[i]
else:
cur_avg = s / (n - i)
sum += pow(cur_avg - avg,2)*(n - i)
break
print('{:.4f}'.format(sqrt(sum/(n))))
运行结果:
例题2:成绩统计
问题描述:
小蓝给同学们组织了一场考试,卷面总分为100分,每个学生的分数都是一个0到100的整数。
如果得分至少是60分,则称为及格,如果得分至少为85分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
输入描述:
输入的第一行包含一个整数n(1 <= n <= 10^4),表示考试人数。
接下来n行,每行包含要给0到100的整数,表示一个学生的得分。
输出描述:
输出两行,每行一个百分数,分别表示及格率和优秀率,百分号前的部分四舍五入保留整数。
参考答案:
n = int(input())
cnt1 = 0
cnt2 = 0
for i in range(1,n + 1):
x = int(input())
if x >= 60:
cnt1 += 1
if x >= 85:
cnt2 += 1
print('{:.0f}%'.format(round(100.0 * cnt1/n,2)))
print('{:.0f}%'.format(round(100.0 * cnt2/n,2)))
例题3:
问题描述:
小蓝想把一个字符串中的字母按其在字母表中的顺序排列。
参考答案:
s = 'HABIOEWAEGE'
t = ''.join(sorted(s))
print(t)
运行结果:
例题4: 纸张尺寸
问题描述:
在ISO国际标准中定义了A0的纸张大小为1189mm * 841mm, A0纸沿长边对折后为A1纸,大小为841mm * 594mm,在对折的过程中长度直接取下整(实际裁剪时可能有损耗),将A1纸以长边对折后为A2纸,以此类推。
输入纸张的名称,请输出纸张的大小。
输入格式:
输入一行包含一个字符串表示纸张的名称,该名称一定是A0,A1,A2,A3,A4,A5,A6,A7,A8,A9之一。
输出格式:
输出两行,每行包括一个整数,依次表示长边和短边的长度。
参考答案:
x = int(input()[1])
a,b = 1189,841
for i in range(x):
a //= 2
if a < b:
a,b = b,a
print(a)
print(b)
运行结果:
OK,我这篇就写到这里,下一篇继续!