一个分数一般写成两个整数相除的形式:N/M,其中M不为0。最简分数是指分子和分母没有公约数的分数表示形式。
现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为K的最简分数。
输入格式:
输入在一行中按N/M的格式给出两个正分数,随后是一个正整数分母K,其间以空格分隔。题目保证给出的所有整数都不超过1000。
输出格式:
在一行中按N/M的格式列出两个给定分数之间分母为K的所有最简分数,按从小到大的顺序,其间以1个空格分隔。行首尾不得有多余空格。题目保证至少有1个输出。
输入样例:
7/18 13/20 12
输出样例:
5/12 7/12
1 package com.hone.basical; 2 3 import java.util.Scanner; 4 5 /** 6 * 原题目:https://www.patest.cn/contests/pat-b-practise/1062 7 * @author Xia 8 * 最简分数,首先得判断两个数的大小 9 * Math.round(double x)将x强制转化为整数(四舍五入) 10 * 这道题目有一个测试点没有通过。。 11 */ 12 13 public class basicalLevel1062EasiestFraction { 14 15 public static void main(String[] args) { 16 Scanner in = new Scanner(System.in); 17 String aString = in.next(); 18 String bString = in.next(); 19 int k = in.nextInt(); 20 21 int n1 = Integer.parseInt(aString.split("\/")[0]); 22 int m1 = Integer.parseInt(aString.split("\/")[1]); 23 double a = (double)n1/(double)m1; 24 25 int n2 = Integer.parseInt(bString.split("\/")[0]); 26 int m2 = Integer.parseInt(bString.split("\/")[1]); 27 double b = (double)n2/(double)m2; 28 29 if (a>b) { 30 double temp = a; 31 a = b; 32 b = temp; 33 } 34 35 double y1 = Math.ceil(a*(double)k); //向上取整 36 double y2 = Math.floor(b*(double)k); //向下取整 37 boolean isEas = true; 38 int flag = 1; //用flag来判断是否是第一个输出(是否加空格) 39 double i = y1; 40 while (i <= y2) { 41 isEas = true; 42 for (int j = 2; j <= i; j++) { 43 if (i%j==0&&k%j==0) { //判断是否为最简形式 44 isEas = false; 45 break; 46 } 47 } 48 if (isEas){ 49 if (flag == 1) { 50 System.out.print(Math.round(i)+"/"+k); 51 flag = 0; 52 }else 53 System.out.print(" "+Math.round(i)+"/"+k); 54 } 55 i++; 56 } 57 System.out.println(); 58 } 59 }