PTA题解 --- N个数求和(C语言)

news2025/3/9 23:11:25

今天是PTA题库解法讲解的第二天,今天我们要讲解N个数求和,题目如下:

要解决这个问题,我们可以用C语言编写一个程序来处理和简化分数。程序的基本思路如下:

1. 定义一个函数来计算两个数的最大公约数(GCD),用于分数的简化。
2. 读取输入的N个分数,每次读取两个整数作为分子和分母。
3. 定义两个变量来存储累加的分数的分子和分母。
4. 对每个输入的分数执行以下操作:
   a. 将其与累加分数相加,即分子相加后存储,分母相乘后存储。
   b. 简化结果分数,即用GCD函数求分子和分母的最大公约数,然后分别除以该公约数。
5. 最后,输出结果分数的最简形式,如果有整数部分,则分开输出。

#include <stdio.h>

// 计算最大公约数
long long gcd(long long a, long long b) {
    return b == 0 ? a : gcd(b, a % b);
}

// 分数累加并简化
void add_fraction(long long a, long long b, long long *sum_numerator, long long *sum_denominator) {
    // a/b 是当前分数,sum_numerator/sum_denominator 是累加的分数
    *sum_numerator = *sum_numerator * b + *sum_denominator * a;
    *sum_denominator *= b;
    // 简化分数
    long long g = gcd(*sum_numerator, *sum_denominator);
    *sum_numerator /= g;
    *sum_denominator /= g;
}

int main() {
    int N;
    scanf("%d", &N);
    
    long long sum_numerator = 0; // 累加的分数的分子
    long long sum_denominator = 1; // 累加的分数的分母
    for (int i = 0; i < N; i++) {
        long long numerator, denominator;
        scanf("%lld/%lld", &numerator, &denominator);
        add_fraction(numerator, denominator, &sum_numerator, &sum_denominator);
    }
    
    // 输出结果
    if (sum_numerator % sum_denominator == 0) {
        // 如果分子能整除分母,则只输出整数部分
        printf("%lld\n", sum_numerator / sum_denominator);
    } else if (abs(sum_numerator) > sum_denominator) {
        // 如果分子大于分母,则输出整数部分和分数部分
        printf("%lld %lld/%lld\n", sum_numerator / sum_denominator, abs(sum_numerator) % sum_denominator, sum_denominator);
    } else {
        // 否则只输出分数部分
        printf("%lld/%lld\n", sum_numerator, sum_denominator);
    }
    
    return 0;
}

我们把在编译器上面运行样例:

提交结果:

本题通过,今天的讲解到此为止~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1519718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python爬虫基础教程 | 第一篇】URL、HTTP基础必知必会

前言 该专栏开设的目的在于给初学者提供一个学习爬虫的成长平台&#xff0c;文章涉及内容均为必备知识。 可订阅专栏&#xff1a;【Python爬虫教程】 | CSDN秋说 文章目录 前言URL概念及组成结构HTTP概念简述浏览器接收资源HTTP协议的结构请求结构请求行请求头请求体请求差异及…

win10虚拟机安装驱动教程

在虚拟机菜单栏中选择安装VMware Tools&#xff1a; 安装好后&#xff0c;在虚拟机中打开此电脑&#xff0c;双击DVD驱动器进行安装&#xff1a; 一直点击下一步&#xff1a; 安装完成&#xff1a; 此时重启虚拟机&#xff0c;发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…

Java Web开发从0到1

文章目录 总纲第1章 Java Web应用开发概述1.1 程序开发体系结构1.1.1 C/S体系结构介绍1.1.2 B/S体系结构介绍1.1.3 两种体系结构的比较1.2 Web应用程序的工作原理1.3 Web应用技术1.3.1 客服端应用技术1.3.2 服务端应用技术1.4 Java Web应用的开发环境变量1.5 Tomcat的安装与配置…

OpenCV(八)——基本线条操作

基本线条操作 OpenCV中提供了基本的线条的操作&#xff0c;包括画直线、画矩形、画圆形等。 &#xff08;1&#xff09;画直线&#xff0c;在OpenCV中利用line()画直线&#xff0c;形式为image_with_line cv2.line(image, start_point, end_point, color, thickness)。line(…

使用 Docker Compose 快速搭建监控网站 uptime-kuma

有时候需要监控自己搭建的一些网站、服务是否正常运行&#xff0c; 这时候可以考虑使用一个监控网站&#xff0c; 定时的进行检测&#xff0c; 记录网站、服务的运行状态&#xff0c; 在这推荐使用 uptime-kuma。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539…

学生打架支小蜜AI校园防欺凌系统可以识别到吗?

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;为我们的生活带来了极大的便利。在校园安全领域&#xff0c;AI技术的应用也日益广泛&#xff0c;其中&#xff0c;AI校园防欺凌系统更是受到了广泛关注。那么&#…

【SystemVerilog】结构体真是太好用了~

前言 Verilog最大的缺陷之一是没有数据结构。在SystemVerilog中可以使用struct创建结构&#xff0c;struct只是把数据组织到一起&#xff0c;是数据的集合&#xff0c;所以是可综合的。 结构体是可以通过模块接口进行传递的&#xff0c;这就是本文想描述的内容。 一、结构体的…

进程及进程状态

1.PCB及task_struct 进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集合。 书上称之为 PCB &#xff08; process control block &#xff09;&#xff0c; Linux 操作系统下的 PCB 是 : task_struct。 task_struct是PCB的一种。 task_struc…

MySQL教程-安装与卸载

MySQL官网 https://www.mysql.com MySQL 官方提供了两种不同的版本&#xff1a; 社区版 MySQL Community Server&#xff0c;免费&#xff0c;但不提供任何技术支持商业版 MySQL Enterprise Server&#xff0c;收费&#xff0c;官方可提供技术支持 本教程采用MySQL的社区版作…

看!Chat4.0如何看待AI与光纤资源管理软件的应用结合点及价值

问&#xff1a;你好&#xff0c;AI在光纤资源管理软件中有那些应用结合点&#xff0c;请详细描述应用结合点及价值? 答&#xff1a;AI在光纤资源管理软件中的应用结合点涉及多个方面&#xff0c;它们通过智能化的手段提高资源管理的效率和准确性。以下是一些关键的应用结合点及…

阿里云服务器centos安装msf教程

msf官方命令行一键安装 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall 稍微等待几分钟即可安装成功&am…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Progress)

进度条组件&#xff0c;用于显示内容加载或操作处理等进度。 说明&#xff1a; 该组件从API version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Progress(options: ProgressOptions<Type>) 创建进度组件&a…

VGG网络的代码实现

VGG网络的程序实现完全根据配置表来实现。 全连接层之前的部分属于特征提取部分&#xff0c;后三部分全连接层用来分类。 1、模型 import torch.nn as nn import torch# official pretrain weights #预训练的权重下载地址 model_urls {vgg11: https://download.pytorch.org/…

使用opencv进行图片分析

opencv学习 一、配置环境并打开编译器 配置opencv在你的任意一个盘里创建一个专属于opencv的文件夹便于学习与整理 打开控制台winr输入cmd&#xff0c;进入后输入conda activate opencv&#xff0c;进入环境以后进入你所设置的opencv文件的盘&#xff0c;我的是D盘&#xff0…

fastreport循环数据表

1.创建数据源 2.将数据源关联到数据区 3.配置控件及属性 拖拽文本控件&#xff0c;设置文本控件的style属性为Data 4.比对效果 比对数据库和报表的数据一致。且循环显示。 数据库数据 报表展示数据

【Qt】从QMainWindow到UI框架

目录 简介UI布局元素Central WidgetMenu BarToolbarsStatus BarDock Widgets 参考文档 简介 如下图所示&#xff0c;我们常见的一些desktop软件&#xff0c;比如VS Code、Smart VCI等&#xff0c;一般都会包含顶部的菜单栏&#xff0c;底部的状态栏&#xff0c;以及一些其他UI…

工业制造领域系统:SCADA、PLC、DCS、MES、HMI、ERP等,一文秒懂

工业制造控制系统在工业制造领域起到了关键的作用&#xff0c;帮助企业提高生产效率、降低成本、提高产品质量和安全性。不同的企业根据自身需求和规模&#xff0c;可能会选择使用其中的一种或多种系统。 SCADA系统&#xff08;Supervisory Control and Data Acquisition&…

第2章 信息技术基础

本章学习要点 全面了解医院信息系统建设所涉及的主要信息技术以及这些技术的应用情况。 计算机与网络、信息技术与信息系统、数字媒体与数据存储技术、条形码(二维码)、RFID技术、云计算、APP技术 1.XML 可扩展标记语言与Access&#xff0c;Oracle和SQL Server等数据库不同…

什么软件可以剪辑录音?录音剪辑推荐3款工具

随着数字技术的发展&#xff0c;录音已经成为我们日常生活和工作中不可或缺的一部分。无论是会议记录、课堂笔记&#xff0c;还是音乐创作、语音聊天&#xff0c;我们都需要用到录音功能。然而&#xff0c;单纯的录音往往不能满足我们的需求&#xff0c;我们还需要对录音进行剪…

常用芯片学习——TP4057电源管理芯片

TP40578 500mA线性锂离子电池充电器 芯片介绍 TP4057是一款性能优异的单节锂离子电池恒流/恒压线性充电器。TP4057采用S0T23-6封装配合较少的外围原件使其非常适用于便携式产品&#xff0c;并且适合给USB电源以及适配器电源供电。 基于特殊的内部MOSFET架构以及防倒充电路&a…