本题的要求很简单,就是求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
题目分析:
对于分数求和,我们首先要注意道德一点就是分数必须是同分母的分数才能够进行求和运算,所以我们要求出所有分母的最小公倍数。两个数的最小公倍数可以通过他们的最大公约数求得(最小公倍数=连个数的乘积/最大公约数),然后根据每一个分数的分母扩大的比例,将分子也扩大相同的倍数求和。但是这样得到的分数并不一定是最简形式,还要将分数进行通分,分子分母同时除以最大公约数。这样求得的分数如果是假分数的话还要转化为相应的真分数形式。
代码:
#include
#include
#include
#include
#include
using namespace std;
//gcd()函数,作用主要为求两个数的最大公约数
long long int gcd(long long int m,long long int n)
{
long longint r=m%n;
while(r)
{
m=n;
n=r;
r=m%n;
}
return n;
}
int main()
{
long long int n;
long long int x[103];
long long int y[103];
while(~scanf("%lld",&n))
{
if(n==0)//如果输入的分数的个数为0的话,最后输出的结果也肯定为0
{
printf("0\n");
}
else
{
long long int max1=0;
long long int op=1;//因为要求所有坟墓的最小公倍数,所以让1与第一个分母求公约数
long long int po;
for(long long int i=0;i
{
scanf("%lld/%lld",&x[i],&y[i]);
po=gcd(op,y[i]);//两个数的最大公约数
max1=op*y[i]/po;//两个数的最小公倍数
op=max1;//op表示的是与当前值求公约数的另一个,初始值为1
}
long long int m=0,sum=0,sum1=0;
for(long long int i=0;i
{
m=max1/y[i];//分母扩大的倍数
sum+=x[i]*m;//分子和
}
sum1=max1;
long long int gong=gcd(sum,sum1);//最终的分数要约分
sum=sum/gong;
sum1=sum1/gong;
long long int Zheng =sum/sum1;//分数的整数部分
if(sum-sum1*Zheng==0)
printf("%lld\n",Zheng);//分数只有整数部分的话,直接把整数部分输出来就行
else
{
if(Zheng==0)
{
printf("%lld/%lld\n",sum,sum1);
}
else
printf("%lld %lld/%lld\n",Zheng,sum-Zheng*sum1,sum1);
}
}
}
return 0;
}
PTA 天梯赛 L1
L1-002 打印沙漏 细节:就是在 (i>j&&i+j
天梯赛L1 题解
L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句“Hello World!”就可以了. AC代码:(直接输出记性) #include & ...
PAT L1-009 N个数求和(模拟分数加法)
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...
PTA天梯赛训练题L1-064:估值一亿的AI核心代码(字符串模拟)
Update:smz说regex秒过Orz,yzd记在这里了. 听说今年天梯赛有个烦人的模拟,我便被队友逼着试做一下……一发15,二发20.记一记,要不然枉费我写这么久…… 自己还是代码能力太菜了,校 ...
团体程序设计天梯赛-练习集L1-009. *N个数求和
L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题的要求很简单,就是求N个数字的和.麻烦的是,这些 ...
PAT L1 049 天梯赛座位分配
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...
PAT团体程序设计天梯赛 - 模拟赛
由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 ...
『ACM C++』 PTA 天梯赛练习集L1 | 052-053
今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...
『ACM C++』 PTA 天梯赛练习集L1 | 048-49
今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...
『ACM C++』 PTA 天梯赛练习集L1 | 001-006
应师兄要求,在打三月底天梯赛之前要把PTA上面的练习集刷完,所以后面的时间就献给PTA啦~ 后面每天刷的题都会把答案代码贡献出来,如果有好的思路想法也会分享一下~ 欢迎大佬提供更好的高效率算法鸭~ - ...
随机推荐
[z]Java开发必会的Linux命令
1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xm ...
IOS Socket 02-Socket基础知识
1. 简介 Socket就是为网络服务提供的一种机制 通信的两端都是Socket 网络通信其实就是Socket间的通信 数据在两个Socket间通过IO传输 2. Socket通信流程图 3. 模拟Q ...
SunSonic 3.0 ORM开源框架的学习
SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接在此)系列的随笔接触到的,本文章学习内容源于AllEmpty大神. S ...
poj1458 Common Subsequence ——最长公共子序列
link:http://poj.org/problem?id=1458 最基础的那种 #include #include #includ ...
android 升级APK
Intent intent = new Intent(); //执行动作 intent.setAction(Intent.ACTION_VIEW); //执行完打开应用 intent.setFlags ...
Jfinal中定时器的初步探索(一)
1.添加包引用:/jfinal_demo/WebContent/WEB-INF/lib/quartz-all-1.6.1.jar 注意版本号,这个版本是现在项目中使用的,已经有更高版本了,但这版比较稳 ...
Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good
引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...
IP命令
ip命令是Linux下较新的功能强大的网络配置工具. 1 功能 ip命令用来显示或操纵Linux主机的路由.网络设备.策略路由和隧道. 2用法 Usage: ip [ OPTIONS ] OBJECT ...
JS表单对象和图片对象--JavaScript基础
1.表单对象 1)访问者输入正确的密码才可进入网站 HTML DOM prompt() 方法,prompt() 方法用于显示可提示用户进行输入的对话框.prompt(text,defaultText) ...