当前位置: 首页 > article >正文

2025-03-01 学习记录--C/C++-PTA 7-35 有理数均值

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

在这里插入图片描述
在这里插入图片描述

二、代码(C语言)⭐️

#include <stdio.h>

// 【关键】计算最大公约数(GCD)
long long gcd(long long a, long long b) {
    while (b != 0) {  // 当 b 不为 0 时循环
        long long temp = b;  // 临时变量存储 b 的值
        b = a % b;  // 计算 a 除以 b 的余数,赋值给 b
        a = temp;  // 将之前存储的 b 的值赋值给 a
    }
    return a;  // 当 b 为 0 时,a 就是最大公约数
}

int main() {
    int n; // 有理数的个数
    scanf("%d", &n); // 读取有理数的个数

    long long fenZiArr[n], // 所有的分子组成一个数组
    fenMuArr[n]; // 所有的分母组成一个数组

    // 获得所有分母的乘积,即通分后的分母
    long long fenMuMultiply = 1; // 初始化分母乘积为 1

    // 将输入的分子分母依次放入各自的数组中去
    for (int i = 0; i < n; i++) {
        scanf("%lld/%lld", &fenZiArr[i], &fenMuArr[i]); // 读取分子和分母

        // 【关键】对 当前分数 进行约分
        long long gcdValue1 = gcd(fenZiArr[i], fenMuArr[i]); // 计算分子和分母的最大公约数
        fenZiArr[i] /= gcdValue1; // 分子约分
        fenMuArr[i] /= gcdValue1; // 分母约分

        // 【关键】计算 当前分母 与 fenMuMultiply 的最大公约数
        long long gcdValue2 = gcd(fenMuMultiply, fenMuArr[i]);
        // 更新 fenMuMultiply 为当前分母与 fenMuMultiply 的最小公倍数
        fenMuMultiply *= (fenMuArr[i] / gcdValue2);
    }

    // 获得通分后的分子
    long long fenZiSum = 0; // 初始化分子和为 0
    for (int i = 0; i < n; i++) {
        fenZiArr[i] *= (fenMuMultiply / fenMuArr[i]); // 将分子通分
        fenZiSum += fenZiArr[i]; // 累加通分后的分子
    }

    // 获得求平均值后的分母
    long long fenMuAverage;
    fenMuAverage = fenMuMultiply * n; // 平均值分母为 fenMuMultiply * n

    // 求所得平均值(fenZiSum / fenMuAverage)的最简分数形式
    long long gcdValue3 = gcd(fenZiSum, fenMuAverage); // 计算分子和分母的最大公约数
    // 约分化简
    fenZiSum /= gcdValue3; // 分子约分
    fenMuAverage /= gcdValue3; // 分母约分

    // 若分母为1,则只输出分子
    if (fenMuAverage == 1) {
        printf("%lld", fenZiSum); // 输出分子
    } else {
        printf("%lld/%lld", fenZiSum, fenMuAverage); // 输出 a/b(分子/分母) 形式
    }

    return 0; // 程序正常结束
}

C语言 使用欧几里得算法(辗转相除法)计算两个整数的最大公约数请看我的另一篇文章。

在这里插入图片描述


http://www.kler.cn/a/567698.html

相关文章:

  • 【AD】3-9 物料BOM表的设置与导出
  • js的数据代理机制
  • 一文速通C++非类型模板参数
  • Windows安装sql server2017
  • Arduino控制舵机
  • 前端Npm面试题及参考答案
  • SQL 中的 EXISTS 子句:探究其用途与应用
  • Yolo11实战:基于YOLOv11的半自动化数据标注技术实践
  • SCIKIT-LEARN 决策树实现csv文档简单的推论预测
  • C++:string类(简单介绍)
  • DaoCloud 亮相 2025 GDC丨开源赋能 AI 更多可能
  • 翻译: 深入分析LLMs like ChatGPT 一
  • MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
  • 【STM32(HAL库) RTC】(实时时钟)配置
  • 【力扣】2619. 数组原型对象的最后一个元素——认识原型与原型链
  • java23种设计模式-观察者模式
  • OpenHarmony应用间跳转
  • 在docker中运行R容器,并在Windows下的vscode中使用该R
  • 卷积神经网络(Convolutional Neural Network,CNN)详细解释(带示例)
  • nexus如何上传自己的依赖包