1062 簡略分数 分数 20

分数は通常、2 つの整数の除算として記述されます: N/M (M はゼロではありません)。最小分数は、分子と分母に公約数がない分数の表現です。

ここで、2 つの等しくない正の分数 N1 /M1 と N2 /M2 が与えられた場合、それらの間の分母 K を含む最も単純な分数を昇順でリストする必要があります。

入力形式:

入力では、1 行に N/M の形式で 2 つの正の分数が表示され、その後にスペースで区切られた正の整数の分母 K が続きます。タイトルは、指定されたすべての整数が 1000 を超えないことを保証します。

出力フォーマット:

与えられた 2 つの分数の間の分母が K である最も単純な分数をすべて N/M 形式で 1 ​​行に昇順に、1 つのスペースで区切ってリストします。行の先頭または末尾に余分なスペースがあってはなりません。タイトルには少なくとも 1 つの出力が保証されます。

例:

7/18 13/20 12

出力例:

5/12 7/12

実際には、指定されたサイズの 2 つの分数の間で、分子と分母が最大公約数を持たない (つまり、最大公約数が 1 である) 分数を見つけることです。

__gcd(,) は、2 つの数値間の最大公約数を見つけるライブラリ関数です。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	double n1,n2,m1,m2;
	int k;
	scanf("%lf/%lf %lf/%lf %d",&n1,&m1,&n2,&m2,&k);
	double mx,mn;
	int flag = 0;
	mx = max(n1/m1,n2/m2);
	mn = min(n1/m1,n2/m2);
	for(int i = 0;i<=k;i++){
		double t = i*1.0/(k*1.0);
		if(t>mn&&t<mx&&__gcd(i,k) == 1){
			if(flag==0) {printf("%d/%d",i,k); flag = 1;}
			else printf(" %d/%d",i,k); 
		}
	}
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_53514496/article/details/125781305