L1-009:N个数求和

目录

⭐题目描述⭐

⭐分析

⭐程序代码

 运行结果

 ⭐文案分享⭐


⭐题目描述⭐

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。


输入格式:

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。


输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。


输入样例1:

5
2/5 4/15 1/30 -2/60 8/3

输出样例1:

3 1/3

输入样例2:

2
4/3 2/3

输出样例2:

2

输入样例3:

3
1/3 -1/6 1/8

输出样例3:

7/24

⭐分析

 我们可以用两个变量sum和num来计算分子和分母的变化,一开始我们将sum的值赋为0,num的值赋为1,然后字母a为输入分数的分子,b为分母,以样例测试一为例:

5
2/5 4/15 1/30 -2/60 8/3

算法描述为:

for(int i=0;i<N;i++){
    	scanf("%d/%d",&a,&b);
    	sum*=b;
    	sum+=num*a;
		num*=b;
		int s=num_GY(num,sum);//寻找num和sum的最大公约数
		sum=sum/s;//将分子和分母最简化
		num=num/s;
	}
sum=0anum=1b

sum=0*5=0

sum=0+1*2=2

2num=1*5=55
sum=2/1=2sum和num的最大公约数为1num=5/1=5sum和num的最大公约数为1

sum=2*15=30

sum=30+5*4=50

4num=5*15=7515
sum=50/25=2sum和num的最大公约数为25num=75/25=3sum和num的最大公约数为25

sum=2*30=60

sum=60+3*1=63

1num=3*30=9030
sum=63/9=7sum和num的最大公约数为9num=90/9=10sum和num的最大公约数为9

sum=7*60=420

sum=420+10*(-2)=400

-2num=10*60=60060
sum=400/200=2sum和num的最大公约数为200num=600/200=3sum和num的最大公约数为200

sum=2*3=6

sum=6+3*8=30

8num=3*3=93
sum=30/3=10sum和num的最大公约数为3num=9/3=3

sum和num的最大公约数为3

求两个数的最大公约数,我们可以用辗转相除法,这样我们的程序的时间复杂度是O(n),如果我们在写算法题的过程中遇到超时问题,请先检查我们的算法是否有循环套循环的过程,如果有,请想办法去掉一层循环来降低我们的算法时间复杂度。

辗转相除法的算法描述:

int num_GY(int num,int sum){//寻找分子分母的最大公约数
	int min=num<sum?num:sum;//找出两个数的最小值
	int max=num>sum?num:sum;//找出两个数的最大值
	int t;
	while(min!=0){//利用辗转相除法计算最大公约数
		t=max%min;
		max=min;
		min=t;
	}
	return max;
}

举例:

我们可以任意找两个数,比如63和90,我们来用辗转相除法求最大公约数。

首先我们先判断出这两个数的最大值和最小值。

int min=num<sum?num:sum;//找出两个数的最小值
int max=num>sum?num:sum;//找出两个数的最大值
循环tmax=90min=63
第一次循环(min!=0)t=90%63=27max=63min=27
第二次循环(min!=0)t=63%27=9max=27min=9
第三次循环(min!=0)t=27%9=0max=9min=0
第四次循环(min==0)退出循环返回max=9结束

⭐程序代码

#include<stdio.h>
int num_GY(int num,int sum){//寻找分子分母的最大公约数
	int min=num<sum?num:sum;//找出两个数的最小值
	int max=num>sum?num:sum;
	int t;
	while(min!=0){//利用辗转相除法计算最大公约数
		t=max%min;
		max=min;
		min=t;
	}
	return max;
}
int main(){
    int N;
    scanf("%d",&N);
    int a,b;
    int sum=0,num=1;//sum为分子和,num为分母和
    for(int i=0;i<N;i++){
    	scanf("%d/%d",&a,&b);
    	sum*=b;
    	sum+=num*a;
		num*=b;
		int s=num_GY(num,sum);
		sum=sum/s;//将分子和分母最简化
		num=num/s;
	}
		if(sum%num==0)//当分子是分母的倍数时
		printf("%d",sum/num);
	    else if(sum<num)//当分子小于分母时
		printf("%d/%d",sum,num);
		else//当分子大于分母时
        printf("%d %d/%d",sum/num,sum%num,num);
    return 0;
}

 💖运行结果💖

 ⭐文案分享⭐

永远相信美好的事情即将发生。--------2023.12.2💖

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XIAO ESP32S3之SenseCraft 模型助手部署

sipeed教程&#xff1a;SenseCraft 模型助手部署 | Seeed Studio Wiki 一、安装ESP-IDF 鉴于我的电脑之前安装过esp-idf v4.3版本&#xff0c;而ESP32-S3需要v4.4及以上版本才支持&#xff0c;所以将esp-idf更新到最新5.1版本。 1、启动mingw32.exe应用 2、进入esp-idf目录 …

前端小记--2.element-ui中级联选择器cascader如何默认展开下拉框

最近做项目时&#xff0c;遇到一个需求&#xff1a;在一个排班表中&#xff0c;展示人员的值班情况&#xff0c;点击单元格&#xff0c;弹出下拉框&#xff0c;修改人员排班信息。 由于下拉框选择内容是树状结构&#xff0c;这里使用了element-ui中级联组件cascader&#xff0c…

ganache部署智能合约报错VM Exception while processing transaction: invalid opcode

这是因为编译的字节码不正确&#xff0c;ganache和remix编译时需要选择相同的evm version 如下图所示&#xff1a; remix: ganache: 确保两者都选择london或者其他evm&#xff0c;只要确保EVM一致就可以正确编译并部署&#xff0c; 不会再出现VM Exception while processing…

Wireshark使用详解

wireshark简介 wireshark是捕获机器上的某一块网卡的网络包&#xff0c;当你的机器上有多块网卡的时候&#xff0c;你需要选择一个网卡。   wireshark能获取HTTP&#xff0c;也能获取HTTPS&#xff0c;但是不能解密HTTPS&#xff0c;所以wireshark看不懂HTTPS中的内容&#…

【C++】类和对象——初始化列表和static修饰成员

首先我们来谈一下初始化列表&#xff0c;它其实是对于我们前边构造函数体内初始化的一种补充&#xff0c;换一种说法&#xff0c;它以后才是我们构造函数的主体部分。 我们先考虑一个问题&#xff0c;就是一个类里面有用引用或const初始化的成员变量&#xff0c;比如说&#xf…

【【FPGA 之 MicroBlaze 自定义IP核 之 呼吸灯实验】】

FPGA 之 MicroBlaze 自定义IP核 之 呼吸灯实验 通过创建和封装 IP 向导的方式来自定义 IP 核&#xff0c;支持将当前工程、工程中的模块或者指定文件目录封装成 IP 核&#xff0c;当然也可以创建一个带有 AXI4 接口的 IP 核&#xff0c;用于 MicroBlaze 软核处理器和可编程逻辑…

kubernetes中YAML介绍;API资源对象Pod;Pod原理和生命周期;Pod资源限制

YAML介绍&#xff1b;API资源对象Pod&#xff1b;Pod原理和生命周期&#xff1b;Pod资源限制 1&#xff09;认识YAML 官网&#xff08;https://yaml.org/&#xff09; YAML 语言创建于 2001 年&#xff0c;比 XML 晚了三年。YAML虽然在名字上模仿了XML&#xff0c;但实质上与…

Spring之RestTemplate详解

Spring之RestTemplate详解 1 RestTemplate1.1 引言1.2 环境配置1.2.1 非Spring环境下使用RestTemplate1.2.2 Spring环境下使用 RestTemplate1.2.3 Spring环境下增加线程号 1.3 API 实践1.3.1 GET请求1.3.1.1 不带参请求1.3.1.2 带参的get请求(使用占位符号传参)1.3.1.3 带参的g…

西南科技大学模拟电子技术实验四(集成运算放大器的线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 反相比例运算电路(1)实验…

VMware Workstation Pro 17及 Windows 11 虚拟机的安装与激活

六点钟&#xff1a; 吃晚饭吗 不吃&#xff0c;胖胖 十点钟&#xff1a; 阿昊要吃夜宵对不对 ——CSDN&#xff0c;记录牛马生活 本文是在学习 Linux 期间&#xff0c;使用 VMware 时顺带学习 Windows 11 虚拟机的安装与激活 VMware Workstation Pro 17及 Windows 11 虚拟机…

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗&#xff1f;MacDroid Pro for Mac 是您的最佳选择&#xff01;这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面&#xff0c;让您能够直接在Mac上…

基于Springboot + vue的汽车资讯网站

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

Vue学习记录

Vue学习记录 一、搭建Vue开发环境 到官网下载安装Vue&#xff1a;安装 — Vue.js (vuejs.org) ----->点击开发版下载 怎么解决&#xff1f; 到官网&#xff1a;安装 — Vue.js 点击&#xff1a; 下滑找到&#xff1a; 下载相应的版本的就行&#xff1a; 下载拓展后刷新…

Collection的其他相关知识

前置知识&#xff1a;可变参数 就是一种特殊参数&#xff0c;定义在方法 构造器的形参列表里&#xff0c;格式是&#xff1a;数据类型...参数名称&#xff1b; 可变参数的特点和好处 特点&#xff1a;可以不传数据给它&#xff1b;可以传一个或者同时传多个数据给它&#xff…

Halcon tiff 点云读取以及平面矫正

一、读取tiff 图 dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle)xResolution:0.0025 yResolution:0.0025 zResolution:0.001 read_image (IntputImage, C:/Users/alber/Desktop/2023-08-15_16-38-24-982_/Sta5_002.tif) zoom_image_factor (Intpu…

YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型的检测头去替换YOLOv8中的检测头。RT-DETR号称是打败YOLO的检测模型&#xff0c;其作为一种基于Transformer的检测方法&#xff0c;相较于传统的基于卷积的检测方法&#xff0c;提供了更为全面和深入的特征理解&#xff0c;将…

【探索Linux】—— 强大的命令行工具 P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)

阅读导航 引言一、 Linux线程概念1. 什么是线程2. 线程的概念3. 线程与进程的区别4. 线程异常 二、Linux线程控制1. POSIX线程库2. 创建线程 pthread_create() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型&#xff08;3&#xff09;参数解释&#x…

初识消息队列

1、消息 消息&#xff08;Message&#xff09;是指在应用间传送的数据。消息可以非常简单&#xff0c;比如只包含文本字符串&#xff0c;也可以更复杂&#xff0c;可能包含嵌入对象。 2、消息队列 消息队列&#xff08;Message Queue&#xff09;是一种应用间的通信方式&#…

力扣题:字符串的反转-11.23

力扣题-11.23 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;557. 反转字符串中的单词 III 解题思想&#xff1a;先读取单词&#xff0c;然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…

C语言-指针_02

指针-02 1. 指针的指针 概念&#xff1a;指针变量中存储的是指针的地址&#xff0c;又名 二维指针 语法&#xff1a; 数据类型 **p;示例&#xff1a; #include <stdio.h> int main(int argc, char const *argv[]) {int num 10;int *p1 &num;int **p2 &p1…