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
思路:求出所有分母的最小公倍数,分子通分后相加。所得结果的分子分母约分,再分多种情况按格式输出。具体分为分子为零、分子的绝对值大于分母、分子的绝对值小于分母这几种情况。从键盘读取分子分母的时候用sc.next(),再用split("/")得到具有分子分母的字符串数组。 最开始傻了,直接全部用sc.nextInt()读了,结果就会出java.util.InputMismatchException异常,因为读数是以空格和换行为分隔读取的。。。
上代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int row=sc.nextInt();
int [][]arr=new int[2][row];
int i=0;
String a;
String s[];
for(i=0;i<row;i++)
{
a=sc.next();
s=a.split("/");
arr[0][i]=Integer.parseInt(s[0]);
arr[1][i]=Integer.parseInt(s[1]);
}
int temp=arr[1][0];
for(i=0;i<row-1;i++)//求所有分母的最小公倍数
{
temp=zuixiaogongbeishu(temp,arr[1][i+1]);
}
int son=0;
for(i=0;i<row;i++)//求分子
{
son+=temp/arr[1][i]*arr[0][i];
}
int huajian=zuidagongyueshu(son,temp);
if(huajian!=1)//如果分子分母存在最大公约数
{
son=son/huajian;
temp=temp/huajian;
} if(Math.abs(son)>=temp)
{
if(son%temp!=0){
System.out.print(son/temp+" "+son%temp+"/"+temp);
}else{
System.out.print(son/temp);
} }else if(son==0){
System.out.print("0");
}else{
System.out.print(son+"/"+temp);
}
sc.close();
} public static int zuidagongyueshu(int a,int b)
{
int res=1;
if(a>0&b>0)
{
int min=(a>b)?b:a;
for(int i=min;i>0;i--)
{
if(a%i==0&&b%i==0)
{
res=i;
break;
}
}
}else{
a=Math.abs(a);
b=Math.abs(b);
int min=(a>b)?b:a;
for(int i=min;i>0;i--)
{
if(a%i==0&&b%i==0)
{
res=i;
break;
}
}
}
return res;
}
public static int zuixiaogongbeishu(int a,int b)
{
return a*b/zuidagongyueshu(a,b);
} }
这样做了以后还是有一个测试点不能AC,不知道是哪里没有考虑到。。。

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 ...
- c++---天梯赛---N个数求和
★题目: ★难点:要求只能以有理数和分数去输出结果. ★分析:可以对输入的数据进行通分处理,随后把结果按格式输出. ★代码: #include<iostream> #include< ...
- 约数个数求和+线性筛约数——bzoj3994
这题首先要会线性筛约数个数,并求出前缀和 bool vis[maxn]; int mm,mu[maxn],prime[maxn],num[maxn],sum[maxn],d[maxn],sum1[ma ...
- L1-009. N个数求和
https://www.patest.cn/contests/gplt/L1-009 原来写的找了好久还是有一个测试点没过, 虽说是道水题,但是今天一遍就过了还是挺高兴的. 送你机组数据 52/5 4 ...
- PAT L1-009. N个数求和
本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...
- PAT 天梯赛 L1-009 N个数求和
模拟题 题目链接 题解 每次将两个分数进行相加,到最后再将结果化成带分数.主要考察的最大公约数与最小公倍数. 代码如下: #include<cstdio> #include<cstd ...
随机推荐
- java使用commons-fileupload进行文件上传
java中使用文件上传时需要使用特定的类库,这里使用commons-files类库进行文件上传,在http://commons.apache.org/proper/commons-fileupload ...
- drupal基础
http://www.cnblogs.com/yaoliang11/archive/2009/07/31/1535883.html
- 在Android Studio上进行OpenCV 3.1开发环境配置
开发环境: Windows 7 x 64 家庭版 Android Studio 1.5.1(Gradle版本2.8) JDK 1.8.0 Android 6.0(API 23) OpenCV 3.1. ...
- 任务二:零基础HTML及CSS编码练习
任务目的 针对设计稿样式进行合理的HTML架构,包括以下但不限于: 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 掌握基本的 ...
- 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错
问题描述 我们可以通过使用 Azure ARM SDK 来管理 Azure 上的资源,因此我们也可以通过 SDK 来创建 ARM 类型的虚拟机,当我们使用 1.0.0 版本的 Azure SDK fo ...
- Python 调度算法 死锁 静动态链接(七)
1 select poll epoll的区别 基本上select有3个缺点: 连接数受限 查找配对速度慢 数据由内核拷贝到用户态 poll改善了第一个缺点 epoll改了三个缺点. (1)select ...
- Python——追加学习笔记(一)
映射.字典 ## 映射类型内建函数 * dict Error: Python核心编程(第二版)p170 >>> dict([['x', 1], ['y', 2]]) {'y': 2, ...
- 【Spring实战】—— 11 通过AOP为特定的类引入新的功能
如果有这样一个需求,为一个已知的API添加一个新的功能. 由于是已知的API,我们不能修改其类,只能通过外部包装.但是如果通过之前的AOP前置或后置通知,又不太合理,最简单的办法就是实现某个我们自定义 ...
- JS 排序:冒泡、 二分搜索 /折半搜索 half-interval search
冒泡排序: 重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来. var arr = [5,0,-56,900,12]; //大的排序次数 for(var i=0; i& ...
- Scrum _GoodJob
作为长大的大三老腊肉,我们已经在长大生活了两年多,对于什么是长大人最想完善的校园需求.最想拥有的校园服务媒介也有了更加深切的体会. 于是,GoodJob小团队blingbling闪现啦!! GoodJ ...