当前位置:首页>python>Python编程题30:P5719 【深基4.例3】分类平均

Python编程题30:P5719 【深基4.例3】分类平均

  • 2026-10-11 05:19:44
Python编程题30:P5719 【深基4.例3】分类平均

点击蓝字 关注我们

今天要做的是来自洛谷网站的P5719 【深基4.例3】分类平均。

https://www.luogu.com.cn/problem/P5719

有账号的可以上去做做。

P5719 【深基4.例3】分类平均

题目描述

给定 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))

参考代码及解析

  1. n,k=map(int,input().split()):读取两个整数。

  2. a=[]   b=[]:创建2个空列表

  3. for i in range(1,n+1):循环遍历1-n

  4. if i%k==0:判断是否被k整除

  5. a.append(i):将当前值i添加到列表a中。

  6. else:b.append(i):不整除,添加到列表b中。

  7. print("%.1f %.1f"%(sum(a)/len(a),sum(b)/len(b))):输出各个列表的平均值并保留1位小数。

不用列表的方法:

  1. sum_a = 0:A 类(k 的倍数)总和

  2. cnt_a = 0:A 类数字的个数

  3. sum_b = 0:B 类总和

  4. cnt_b = 0:B 类数字的个数

  5. sum_a += i:是倍数,累加到 A 总和

  6. cnt_a += 1:A 计数 + 1

  7. sum_b += i B 总和累加

  8. cnt_b += 1 B 计数 + 1

  9. avg_a = sum_a / cnt_a 求 A 平均数

  10. avg_b = sum_b / cnt_b 求 B 平均数

  11. print("{0:.1f} {1:.1f}".format(avg_a, avg_b))格式化输出,两个数都保留 1 位小数。

如果你觉得意犹未尽,那就趁热打铁,继续挑战一下吧!

  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 是赋值不是判断。。

最新文章

随机文章