题解:洛谷 P5719 【深基4.例3】分类平均

【题目来源】

洛谷:P5719 【深基4.例3】分类平均 - 洛谷

【题目描述】

给定 \(n\)\(k\),将从 $1 $ 到 \(n\) 之间的所有正整数可以分为两类:$A $ 类数可以被 \(k\) 整除(也就是说是 \(k\) 的倍数),而 $B $ 类数不能。请输出这两类数的平均数,精确到小数点后 $1 $ 位,用空格隔开。

数据保证两类数的个数都不会是 \(0\)

【输入】

输入两个正整数 \(n\)\(k\)

【输出】

输出一行,两个实数,分别表示 \(A\) 类数与 \(B\) 类数的平均数。精确到小数点后一位。

【输入样例】

100 16

【输出样例】

56.0 50.1

【算法标签】

《洛谷 P5719 分类平均》 #模拟#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int n, k;            // 定义变量:n(数字范围上限), k(倍数判断条件)
    int sum1 = 0, sum2 = 0; // 定义变量:sum1(k的倍数的和), sum2(非k倍数的和)
    int c1 = 0, c2 = 0;  // 定义变量:c1(k的倍数的个数), c2(非k倍数的个数)
    double avg1, avg2;   // 定义变量:avg1(k倍数的平均值), avg2(非k倍数的平均值)
    
    cin >> n >> k;       // 输入数字范围n和倍数k
    
    // 遍历1到n的所有数字
    for (int i = 1; i <= n; i++) 
    {
        if (i % k == 0)  // 判断是否为k的倍数
        {
            sum1 += i;   // 累加到k倍数的和
            c1++;        // 计数k倍数的个数
        } 
        else 
        {
            sum2 += i;   // 累加到非k倍数的和
            c2++;        // 计数非k倍数的个数
        }
    }
    
    // 计算平均值(注意转换为浮点数计算)
    avg1 = 1.0 * sum1 / c1;  // k倍数的平均值
    avg2 = 1.0 * sum2 / c2;  // 非k倍数的平均值
    
    // 输出结果(保留1位小数)
    printf("%.1f %.1f", avg1, avg2);
    
    return 0;            // 程序正常结束
}

【运行结果】

100 16
56.0 50.1
posted @ 2026-02-16 10:36  团爸讲算法  阅读(7)  评论(0)    收藏  举报