Python编程题30:P5719 【深基4.例3】分类平均
今天要做的是来自洛谷网站的P5719 【深基4.例3】分类平均。
https://www.luogu.com.cn/problem/P5719
有账号的可以上去做做。
给定 n 和 k,将从 1 到 n 之间的所有正整数可以分为两类:A 类数可以被 k 整除(也就是说是 k 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。
数据保证两类数的个数都不会是 0。
输入格式
输入两个正整数 n 与 k。
输出格式
输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。
输入输出样例
说明/提示
数据保证,1≤n≤10000,1≤k≤100。
本题根据用户输入的两个整数n和k,首先要找出谁能被k整除,由于后续要统计平均数,所以这里找出谁能被整除,谁不能被整除后,要先存起来。最好的就是用列表存储。
解题步骤:
1、读取两个整数n和k。
2、创建2个空列表分别存储能被整除和不能被整除的。
3、for循环遍历1-n。
4、逐个判断是否能被k整除。放到对应的列表里。
5、输出两个列表的平均数。
如果不想用列表,也可以直接用变量,在循环的时候直接累加得到总和和数量。
字符输入 input() 获取字符串,split()分割字符串,int()转换为整数。list转换为列表。
a,b=map(int,input().split()))
for i in range(1,n)循环遍历 1‑n
求列表中数值的平均数:sum(lst)/len(lst)
保留n位小数:
1、print("%.nf"%num)
2、print("{:.nf}".format(num))
n,k=map(int,input().split()):读取两个整数。
a=[] b=[]:创建2个空列表
for i in range(1,n+1):循环遍历1-n
if i%k==0:判断是否被k整除
a.append(i):将当前值i添加到列表a中。
else:b.append(i):不整除,添加到列表b中。
print("%.1f %.1f"%(sum(a)/len(a),sum(b)/len(b))):输出各个列表的平均值并保留1位小数。
sum_a = 0:A 类(k 的倍数)总和
cnt_a = 0:A 类数字的个数
sum_b = 0:B 类总和
cnt_b = 0:B 类数字的个数
sum_a += i:是倍数,累加到 A 总和
cnt_a += 1:A 计数 + 1
sum_b += i B 总和累加
cnt_b += 1 B 计数 + 1
avg_a = sum_a / cnt_a 求 A 平均数
avg_b = sum_b / cnt_b 求 B 平均数
print("{0:.1f} {1:.1f}".format(avg_a, avg_b))格式化输出,两个数都保留 1 位小数。
如果你觉得意犹未尽,那就趁热打铁,继续挑战一下吧!
执行range(1,8),循环变量 i 不会取到哪个数?()
A.1 B.7 C.8 D.3
2.判断变量 i 是 k 的倍数,条件表达式正确的是()
A.i/k==0 B.i% k==0
C.i//k==0 D.i% k=0
1、答案:C
解析:range 左闭右开,终止数字不包含,range (1,8) 最大 i 是 7。
2、答案:B
解析:% 取模,余数为 0 代表可以整除;D 是赋值不是判断。。