文章

【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. 首先,我们需要理解题目的核心要求:
    • 将从 1 到 n 之间的所有正整数分为两类:A 类数是 k 的倍数,B 类数不是
  2. 解题思路:
    • 读取两个整数 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 进行授权