【题解搬运】PAT_L1-009 N个数求和
从我原来的博客上搬运。原先blog作废。
(伪)水题+1,旨在继续摸清这个blog(囧
题目
就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。
题解
对读入,可以使用scanf(“%d/%d”,…);来解决读入问题(scanf很强的!
然后以为自己稳了。。。结果TLE了
问题在哪里呢?在gcd那里,我一开始加上了b与a的大小判断,然而其实不应该这么做!这样做破坏了尾递归(让gcc没法优gao化shi了),极大的减慢了gcd的速度。
后来删掉了if,引出了个WA2333
问题在于负数分数的问题,处理如下,在两个地方加以处理了。
水题想搞事也很容易啊,大意要不得。
代码
#include <bits/stdc++.h>
using namespace std;
#define f1(x,y) for(int x=1;x<=y;++x)
#define f0(x,y) for(int x=0;x!=y;++x)
#define bf1(x,y,z) for(int x=y;x>=z;--x)
#define bf0(x,y,z) for(int x=y;x!=z;--x)
typedef long long ll;
typedef unsigned long long ull;
int gcd(int a,int b)
{
// if(b>a) swap(a,b);
return (b==0)?a:(gcd(b,a%b));
}
int lcm(int a,int b)
{
return a/gcd(a,b)*b;
}
int main()
{
int n;
scanf("%d",&n);
int tota,totb;
f1(i,n)
{
int a,b;
scanf("%d/%d",&a,&b);
if(i==1)
{
tota=a;totb=b;
}
else
{
int tmpb=b;
tmpb=lcm(b,totb);
tota=tota*tmpb/totb+a*tmpb/b;
totb=tmpb;
}
int g=gcd(abs(tota),abs(totb));
tota/=g;totb/=g;
//cout<<tota<<" "<<totb<<endl;
}
if(abs(tota)>=abs(totb) || tota==0)
{
printf("%d",tota/totb);
if(tota%totb==0)
printf("\n");
else
printf(" %d/%d\n",abs(tota)%abs(totb),totb);
}
else printf("%d/%d\n",tota,totb);
//printf("%d/%d\n",tota,totb);
return 0;
}
【题解搬运】PAT_L1-009 N个数求和的更多相关文章
- 团体程序设计天梯赛-练习集L1-009. *N个数求和
L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题的要求很简单,就是求N个数字的和.麻烦的是,这些 ...
- #020PAT 没整明白的题L1-009 N个数求和 (20 分)
后面的测试点过不去,两个错误一个超时. 目前未解决 L1-009 N个数求和 (20 分) 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和 ...
- 暴力+辗转相除法——N个数求和
题目来源 PTA 团体程序设计天梯赛-练习集 L1-009 N个数求和 (20分) https://pintia.cn/problem-sets/994805046380707840/problems ...
- Java:多个数求和
设计思想: 先定义int n,定义输入数的个数,输入一个新建的动态数组,输入数字存入动态数组中,函数转换并求和,最后输出. 程序流程图: 源程序代码: package com; import java ...
- 天梯赛 L1-009 N个数求和 (模拟)
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=1 ...
- 【题解搬运】PAT_A1016 Phone Bills
从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...
- PAT 天梯赛 L1-009 N个数求和
模拟题 题目链接 题解 每次将两个分数进行相加,到最后再将结果化成带分数.主要考察的最大公约数与最小公倍数. 代码如下: #include<cstdio> #include<cstd ...
- c++---天梯赛---N个数求和
★题目: ★难点:要求只能以有理数和分数去输出结果. ★分析:可以对输入的数据进行通分处理,随后把结果按格式输出. ★代码: #include<iostream> #include< ...
- PAT L1-009 N个数求和(模拟分数加法)
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...
随机推荐
- javascript dom 操作详解 js加强
js加强操作实现代码. 1 .文档里的每个节点都有属性 nodeName . nodeValue . nodeType nodeName 文本节点的的节点名是 #text , nodeName 是只读 ...
- html5 ajax Java接口 上传图片
html5图片上传[文件上传]在网上找了很多资料,主要也就2种 1.from表单提交的方式 <form action="pushUserIcon" method=" ...
- 测试Storm的多源头锚定
过程, Spout 发送msgid 1-10 一级Bolt, msgid1的tuple做为基本组合tuple, 其他8个和一组合, 然后发送给二级Bolt, 同时单个msgid对应的tuple都ack ...
- <head> 中的 JavaScript 函数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- js两个浮点数相减出现多位小数的bug
- 还在占用存储的进程lsof grep deleted;
查看僵尸进程 lsof grep deleted; 用于查看已经停止但还在占用存储的进程
- React中setState同步更新策略
setState 同步更新 我们在上文中提及,为了提高性能React将setState设置为批次更新,即是异步操作函数,并不能以顺序控制流的方式设置某些事件,我们也不能依赖于this.state来计算 ...
- php第三节(运算符)
<?php //算术运算符 + - * / % //++ 前加加 先做加运算后座赋值运算 后加加 先做赋值运算后座加运算 //-- 前减减 先做加运算后座赋值运算 后减减 先做赋值运算后座加运算 ...
- ubuntu部署kubeadm1.13.1高可用
kubeadm的主要特性已经GA了,网上看很多人说1.13有bug在1.13.1进行的更新,具体我也没怎么看,有兴趣的朋友可以查查,不过既然有人提到了我们就不要再去踩雷了,就用现在的1.13.1来部署 ...
- JQuery实现聊天对话框
效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...