PAT——1062. 最简分数

一个分数一般写成两个整数相除的形式: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 }
原文地址:https://www.cnblogs.com/xiaxj/p/8005284.html