结构-05. 有理数均值(20)
来源:互联网 发布:数据架构师发展 编辑:程序博客网 时间:2024/05/14 04:12
题目来源:
结构-05. 有理数均值(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
乔林(清华大学)
本题要求编写程序,计算N个有理数的平均值。
输入格式:
输入第1行给出正整数N(<=100);第2行中按照“a1/b1 a2/b2 ……”的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。
输出格式:
在一行中按照“a/b”的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:41/2 1/6 3/6 -5/10输出样例1:
1/6输入样例2:
24/3 2/3输出样例2:
1
解1:
import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashSet;import java.util.LinkedList;import java.util.Scanner;public class Main {public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //正整数n int n = scanner.nextInt(); //分子,分母 int fenzi=0; int fenmu=1; for(int i=0;i<n;i++) { //输入一个分数,a,b来接受分子和分母 String[] str = scanner.next().split("/"); int a = Integer.parseInt(str[0]); int b = Integer.parseInt(str[1]); //两个分数相加 fenzi = fenzi*b+a*fenmu; fenmu = fenmu*b; } //将分母*n之后,再进行一次简化 fenmu = fenmu*n; //将分子和分母最简化的t int t = gcd(fenzi,fenmu); if(t!=0) { fenzi = fenzi/t; fenmu = fenmu/t; } if(fenzi==0 ) { System.out.println(fenzi); } else if(fenmu==1) System.out.println(fenzi); else { System.out.println(fenzi+"/"+fenmu); } }/* * 这是贪心算法。设最大公约数为X,则存在整数i,j使得:a = i*X,b = j*X又因为c = a % b 所以存在整数k使得:c = a-k*b = i*X - k*j*X = (i-j*k)*X即X也是c的公约数,然后a = b; b = c;如此循环,总有b = k*a的时侯,这时b就是最大公约数。 * */ public static int gcd(int fenzi,int fenmu) { int r; if (fenmu == 0 && fenzi == 0) return 0; if (fenmu == 0) return fenzi; if (fenzi == 0) return fenmu; while (true) { r = fenmu % fenzi; if (r == 0) break; fenmu = fenzi; fenzi = r; } return fenzi; }}
解法2:
import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashSet;import java.util.LinkedList;import java.util.Scanner;public class Main {public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //正整数n int n = scanner.nextInt(); //分子,分母 int fenzi=0; int fenmu=1; for(int i=0;i<n;i++) { //输入一个分数,a,b来接受分子和分母 String[] str = scanner.next().split("/"); int a = Integer.parseInt(str[0]); int b = Integer.parseInt(str[1]); //两个分数相加 fenzi = fenzi*b+a*fenmu; fenmu = fenmu*b; } //将分母*n之后,再进行一次简化 fenmu = fenmu*n; //将分子和分母最简化的t int t = simple(fenzi,fenmu); if(t!=0) { fenzi = fenzi/t; fenmu = fenmu/t; } if(fenzi==0) { System.out.println(fenzi); return ; } //标记是否是负数 boolean flag =false; if(fenzi*fenmu<0) //测试 1/-2 -1/2 { flag = true; System.out.print("-"); } //输出负号 if(fenmu==1) System.out.println(Math.abs(fenzi)); else { System.out.println(Math.abs(fenzi)+"/"+Math.abs(fenmu)); } } public static int simple(int fenzi,int fenmu) { int min = Math.min(Math.abs(fenzi), Math.abs(fenmu)); for(int i=min;i>1;--i) { if(fenzi%i==0 && fenmu%i==0) {return i; } } return 0; } }
0 0
- 结构-05. 有理数均值(20)
- 结构-05. 有理数均值(20)
- 结构-05. 有理数均值(20)
- 结构-05. 有理数均值(20)
- 结构-05. 有理数均值(20)
- PAT_B_结构-05. 有理数均值(20)
- 有理数均值 (20分)
- 有理数均值
- 5-35 有理数均值 (20分)
- 5-35 有理数均值 (20分)
- 5-35 有理数均值 (20分)
- 5-35 有理数均值 (20分)
- 7-35 有理数均值(20 分)
- 7-35 有理数均值(20 分)
- 5-5 有理数均值
- 7-35 有理数均值
- 5-35 有理数均值(易错)
- PTA 5-35 有理数均值
- java实现单例模式
- 《Redis设计与实现》学习笔记-发布订阅与事务
- php开发之正则表达式(二)
- 黑马程序员——java---正则表达式
- java多线程学习提高篇
- 结构-05. 有理数均值(20)
- 第二章 基本数字类型--字符串与数值型数据转换
- 杭电1003 Max Sum
- 数据库学习笔记3-oralce 的并发控制与事务隔离级别
- Machine Learning - XII. Support Vector Machines支持向量机(Week 7)
- 获取并设置HTML5 Video的当前进度
- 测试经验分享——互动读书会观感
- 算法题
- 继续配置spring data jpa 在tomcat中