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; }