1062 最简分数

这道题应该是目前以来第二坑的题,第一坑是 B1051 复数乘法 。

坑点一:分数1可能大于分数2,所以两个分数的值要进行交换。

坑点二:分数必须在开区间内选择(分数1,分数2)。

#include<iostream>
#include<algorithm>
using namespace std;

int gcd(int a,int b) {
    return b==0?a:gcd(b,a%b);
}

int main() {
    int fenzi1,fenmu1,fenzi2,fenmu2,fenmu,flag = 0;
    scanf("%d/%d %d/%d %d",&fenzi1,&fenmu1,&fenzi2,&fenmu2,&fenmu);
    if(1.0*fenzi1/fenmu2 > 1.0*fenzi2/fenmu2) {//分数1可能大于分数2,所以两个分数的值要进行交换。
        swap(fenzi1,fenzi2);
        swap(fenmu1,fenmu2);
    }
    for(int i = 1; i < fenmu; ++i) {
        if(gcd(i,fenmu) == 1) {
            if(1.0*i/fenmu > 1.0*fenzi1/fenmu1 && 1.0*i/fenmu < 1.0*fenzi2/fenmu2) {//分数必须在开区间内选择(分数1,分数2)。
                if(flag++ == 0) printf("%d/%d",i,fenmu);
                else printf(" %d/%d",i,fenmu);
            }
        }
    }

    return 0;
}

 

posted @ 2020-02-23 17:12  tangq123  阅读(356)  评论(0编辑  收藏  举报