【GESP】C++二级练习 luogu-P5719 【深基4.例3】分类平均
GESP二级练习,循环分支练习,难度★☆☆☆☆。
luogu-P5719 【深基4.例3】分类平均
题目要求
题目描述
给定 $n$ 和 $k$,将从 1 到 $n$ 之间的所有正整数可以分为两类:A 类数可以被 $k$ 整除(也就是说是 $k$ 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 $1$ 位,用空格隔开。
数据保证两类数的个数都不会是 $0$。
输入格式
输入两个正整数 $n$ 与 $k$。
输出格式
输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。
输入 #1
1
100 16
输出 #1
1
56.0 50.1
说明/提示
数据保证,$1 \leq n\leq 10000$,$1 \leq k \leq 100$。
题目分析
解题思路
- 首先,我们需要理解题目的核心要求:
- 将从 1 到 n 之间的所有正整数分为两类:A 类数是 k 的倍数,B 类数不是
- 解题思路:
- 读取两个整数 n 和 k
- 初始化两个变量来存储 A 类数和 B 类数的总和
- 初始化两个计数器来记录 A 类数和 B 类数的个数
- 遍历从 1 到 n 的所有整数
- 判断每个整数是否是 k 的倍数
- 根据判断结果更新相应的总和和计数器
- 计算 A 类数和 B 类数的平均值,精确到小数点后一位
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n; // 定义一个整型变量 n
cin >> n; // 从标准输入读取 n 的值
int k; // 定义一个整型变量 k
cin >> k; // 从标准输入读取 k 的值
int a = 0, b = 0; // 定义并初始化两个整型变量 a 和 b 为 0
int ans = 0, bns = 0; // 定义并初始化两个整型变量 ans 和 bns 为 0
for (int i = 1; i <= n; i++) { // 循环从 1 到 n
if (i % k == 0) { // 如果 i 能被 k 整除
a += i; // 将 i 的值加到 a 中
ans++; // ans 自增 1
} else { // 如果 i 不能被 k 整除
b += i; // 将 i 的值加到 b 中
bns++; // bns 自增 1
}
}
printf("%.1f %.1f", (double)a / (double)ans, (double)b / (double)bns); // 打印结果,保留一位小数
return 0; // 返回 0,表示程序正常结束
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权