1062 最简分数(JAVA)

简介: 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。

 

一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。

现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。

输入格式:

输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。

输出格式:

在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。

样例:">输入样例:

7/18 13/20 12

image.gif

输出样例:

5/12 7/12

image.gif

代码实现:

import java.io.*;
import java.util.ArrayList;
/**
 * @author yx
 * @date 2022-07-23 18:19
 */
public class Main {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);
    public static void main(String[] args) throws IOException {
//        System.out.println(gcd(3,7));
        String[] split=ins.readLine().split(" ");
        String[] split1=split[0].split("/");
        String[] split2=split[1].split("/");
        double a1=(Double.parseDouble(split1[0])/Double.parseDouble(split1[1]));
        double a2=(Double.parseDouble(split2[0])/Double.parseDouble(split2[1]));
        double K=Double.parseDouble(split[2]);
        double max=Math.max(a1,a2);
        double min=Math.min(a1,a2);
        boolean flag=false;
        for (int i = 0; i < (int) K; i++) {
            if (gcd(i, (int) K) == 1) {
                /*
                注意这个地方是<和>不是<=和>=
                 */
                if (i / K > min && i / K < max && flag) {
                    System.out.print(" " + i + "/" + (int)K);
                }
                if (i / K > min && i / K < max && !flag) {
                    System.out.print(i + "/" + (int) K);
                    flag = true;
                }
            }
        }
    }
    static int gcd(int m,int n){
        return n==0?m:gcd(n,m%n);
    }
}

image.gif

相关文章
|
Cloud Native Oracle Java
李三红:Java30年,未来在哪里?
李三红:Java30年,未来在哪里?
327 0
|
存储 Java 调度
Java 编译指令集大全
Java 编译指令集大全
190 0
|
监控 Dubbo 安全
JAVA问答8
JAVA问答8
105 0
|
分布式计算 Java API
赶快看看Java11,不然你就out了!
由于直接从Java8跨越到Java11,所以特性介绍就把Java9-Java11的部分特性一起介绍一下。想要了解Java8特性的朋友可以去我的博客找「Java8系列」。
659 3
赶快看看Java11,不然你就out了!
1105 链表合并(JAVA)
给定两个单链表 L1​=a1​→a2​→⋯→an−1​→an​ 和 L2​=b1​→b2​→⋯→bm−1​→bm​。如果 n≥2m,你的任务是将比较短的那个链表逆序,然后将之并入比较长的那个链表,得到一个形如 a1​→a2​→bm​→a3​→a4​→bm−1​⋯ 的结果。例如给定两个链表分别为 6→7 和 1→2→3→4→5,你应该输出 1→2→7→3→4→6→5。
1105 链表合并(JAVA)
|
Java
Java常见的坑(二)
你猜上述程序输出的是什么? 是 ABC easy as 123 吗? 你执行了输出操作,你才发现输出的是 ABC easy as [C@6e8cf4c6 ,这么一串丑陋的数字是什么鬼? 实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数。
71 0
|
存储 Java
Java - 9 个小技巧让你的 if else 看起来更优雅(一)
Java - 9 个小技巧让你的 if else 看起来更优雅(一)
394 0
Java - 9 个小技巧让你的 if else 看起来更优雅(一)
|
Java
+ 在Java中有两种使用情况
+ 在Java中有两种使用情况:
106 0
|
存储 安全 算法
一篇文章让你真正了解Java
“你学习一门技术的最佳时机是三年前,其次是现在。”这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Java的几个核心知识点。
|
Java
Java StringTokenzier
Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串。如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你。 1 public static void main(String[] args) { 2 StringTokenizer st = new StringTokenizer("www.
1174 0
下一篇
无影云桌面