题目链接:1062 最简分数 (20 point(s))

题目描述

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

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

输入格式

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

输出格式

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

测试样例

Case 0:

输入

7/18 13/20 12

输出

5/12 7/12

Case 1:

输入(分数 1 比分数 2 大)

13/20 7/18 12

输出

5/12 7/12

Case 2:

输入(结果的分子分母必须互质)

1/2 1/3 16

输出

7/16

Java代码

/**********************************************************************************
Submit Time Status Score Problem Compiler Run Time User
8/17/2019, 22:17:02 Accepted 20 1062 Java (openjdk) 85 ms wowpH
**********************************************************************************/
import java.io.BufferedReader;
import java.io.InputStreamReader; public class Main {
private static boolean coPrime(int a, int b) { // 检查a和b是否互质
while (true) {
a = a % b;
if (0 == a) {
return 1 == b ? true : false;
}
b = b % a;
if (0 == b) {
return 1 == a ? true : false;
}
}
} public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] number = br.readLine().split(" "); // 三个数
String[] arr = number[0].split("/");
int N1 = Integer.parseInt(arr[0]);
int M1 = Integer.parseInt(arr[1]);
arr = number[1].split("/");
int N2 = Integer.parseInt(arr[0]);
int M2 = Integer.parseInt(arr[1]);
int K = Integer.parseInt(number[2]); int min, max; // 开区间的范围
if (N1 * M2 < N2 * M1) { // 分数1比分数2小
min = K * N1 / M1 + 1; // 最小值
max = K * N2 / M2; // 最大值
if (K * N2 == max * M2) { // 最大值是等于右边界
max = max - 1; // 开区间
}
} else { // 分数1比分数2大
min = K * N2 / M2 + 1;
max = K * N1 / M1;
if (K * N1 == max * M1) {
max = max - 1;
}
} for (int i = min, count = 0; i <= max; ++i) {
if (coPrime(K, i)) { // 互质
if (count > 0) { // 不是第一个分数
System.out.print(" "); // 分数前面输出空格
}
System.out.print(i + "/" + K);
++count;
}
}
}
}

提交结果

最新文章

  1. python_九九乘法表
  2. FTP应答码&amp;响应码
  3. ACM: SGU 101 Domino- 欧拉回路-并查集
  4. Qt 手动添加ui文件到工程(转)
  5. IDE、SATA、SCSI、SAS、FC、SSD硬盘类型介绍[zz]
  6. Node.js:常用工具util
  7. hdu 1407 测试你是否和LTC水平一样高
  8. MyBatis源码解析【1】准备工作
  9. LVS实现负载均衡原理
  10. java.lang.IllegalStateException: LifecycleProcessor not initialized - call &#39;refresh&#39; before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Mon Oct 01 16:32:37 CS
  11. 03-django模型(1)
  12. MySQL5.7关于密码二三事
  13. Python3之set, frozenset记录
  14. JavaScript 数组
  15. mod_wsgi 的两种模式
  16. (4)进程---daemon守护线程和join阻塞
  17. 界面及Activity参数设置
  18. java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去
  19. .Net Discovery 系列之六--深入浅出.Net实时编译机制(下)
  20. struts2的execAndWait拦截器

热门文章

  1. 已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位
  2. 13.mysql数据库
  3. SQL查询练习题
  4. Laravel--文件管理及上传自定义目录及文件名
  5. 一个Redis实例适合存储不同应用程序的数据吗?
  6. 测试一下windowsLiveWriter
  7. Angular常用命令:
  8. Source Insight 4.0配置格式化工具AStyle.exe
  9. 常用快捷键 &amp; BLOG &amp; Website
  10. this page isn&#39;t working (ERR_EMPTY_RESPONSE)