PAT 1062 最简分数
Posted zlrrrr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 1062 最简分数相关的知识,希望对你有一定的参考价值。
https://pintia.cn/problem-sets/994805260223102976/problems/994805268334886912
一个分数一般写成两个整数相除的形式:/,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。
现给定两个不相等的正分数 / 和 /,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。
输入格式:
输入在一行中按 / 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。
输出格式:
在一行中按 / 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。
输入样例:
7/18 13/20 12
输出样例:
5/12 7/12
#include <bits/stdc++.h> using namespace std; int a[1111],b[1111]; int gcd(int a,int b) { int c=a%b; while(c) { a=b; b=c; c=a%b; } return b; } int main() { int N1,N2,M1,M2,K; scanf("%d/%d %d/%d %d",&N1,&M1,&N2,&M2,&K); int cnt=1; int ans=0; if(N1*M2>N2*M1) { swap(N1,N2); swap(M1,M2); } for(int i=1; i<=1000; i++) { if(N1*K<M1*i&&M2*i<N2*K) a[cnt++]=i; } for(int i=1; i<cnt; i++) { if(gcd(a[i],K)==1) { ans++; if(ans>1) printf(" %d/%d",a[i],K); else printf("%d/%d",a[i],K); } } return 0; }
以上是关于PAT 1062 最简分数的主要内容,如果未能解决你的问题,请参考以下文章