Skip to content

1062 最简分数

Statement

Metadata

  • 作者: CHEN, Yue
  • 单位: 浙江大学
  • 代码长度限制: 16 KB
  • 时间限制: 400 ms
  • 内存限制: 64 MB

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

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

输入格式

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

输出格式

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

输入样例

7/18 13/20 12

输出样例

5/12 7/12

Solution

#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000
int gcd(int x, int y) {
    int r;
    while (1) {
        r = x % y;
        if (!r)
            break;
        x = y;
        y = r;
    }
    return y;
}
int main() {
    int a, b, c, d, k;
    scanf("%d/%d %d/%d %d", &a, &b, &c, &d, &k);
    double n, m, p;
    n = (double)a / b, m = (double)c / d;
    if (n > m)
        swap(n, m);
    int i, flag = 0;
    for (i = 1; i <= k; i++) {
        p = (double)i / k;
        if (p > n && p < m && gcd(i, k) == 1) {
            if (flag)
                printf(" %d/%d", i, k);
            else {
                flag = 1;
                printf("%d/%d", i, k);
            }
        }
    }
    cout << endl;
}

Last update: May 4, 2022
Back to top