1. 程式人生 > >PAT——1062. 最簡分數

PAT——1062. 最簡分數

ise bool 四舍五入 test scan pac println eas contest

一個分數一般寫成兩個整數相除的形式: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 }

PAT——1062. 最簡分數