1062. 最简分数(20)

原题: https://www.patest.cn/contests/pat-b-practise/1062

思路: 我的思路是, 先把分数转成小数, 这样判断大小就非常简单. 一开始
得了19分, 有个1分的测试点没过, 后来看了网上的, 发现是忘记考虑给出的
2个分数, 没说谁大谁小.

实现:

#include <stdio.h>

int  isSimple (int a, int b);

int main (void) {
    double n1;
    double m1;
    double r1;
    double n2;
    double m2;
    double r2;
    double temp;
    int first = 0;
    int k;
    int i;

    scanf("%lf/%lf %lf/%lf %d", &n1, &m1, &n2, &m2, &k);
    r1 = n1 / m1;
    r2 = n2 / m2;
    // 默认r1 < r2, 如果不是则交换
    if (r1 > r2) {
        temp = r1;
        r1 = r2;
        r2 = temp;
    }
    for (i = 1; i / (double)(k) < r2; i++) {
        if (i / (double)(k) > r1) {
            if (isSimple(i, k) == 1) {
                if (first == 0) {
                    printf("%d/%d", i, k);
                    first = 1;
                } else {
                    // 这里有空格
                    printf(" %d/%d", i, k);
                }
            }
        }
    }

    return 0;
}

// 1最简形式 0非最简形式
int isSimple (int a, int b) {
    int i;
    for (i = 2; i <= a; i++) {
        if (a % i == 0 && b % i == 0) {
            return 0;
        }
    }
    return 1;
}

posted @ 2017-11-26 10:46  阿胜4K  阅读(256)  评论(0编辑  收藏  举报