标签:code -o art msu lan htm break i++ main
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。
现给定两个不相等的正分数 N?1??/M?1?? 和 N?2??/M?2??,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。
输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。
在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行首尾不得有多余空格。题目保证至少有 1 个输出。
7/18 13/20 12
5/12 7/12
#include <stdio.h>
//求两个数的最小公约数
int CommonYue(int m,int n)
{
int r,num1=m,num2=n;
while(m%n)
{
r=m%n;
m=n;
n=r;
}
return n;
}
//求两个数的最小公倍数
int CommonBei(int m,int n)
{
int r,num1=m,num2=n;
while(m%n)
{
r=m%n;
m=n;
n=r;
}
return num1*num2/n;
}
int main()
{
int n1,m1,n2,m2,k;
scanf("%d/%d %d/%d %d",&n1,&m1,&n2,&m2,&k);
int com=CommonBei(m1,m2);
int fenmu=CommonBei(com,k);
int fenzi1=fenmu/m1*n1;
int fenzi2=fenmu/m2*n2;
int temp=fenzi1<=fenzi2?fenzi1:fenzi2;
int start;
start=temp/(fenmu/k);
int a[10000],count=0;
for(int i=start;;i++)
{
if(i*(fenmu/k)>=fenzi1&&i*(fenmu/k)<=fenzi2)
{
if(CommonYue(k,i)==1)
{
a[count++]=i;
}
}
if(i*(fenmu/k)>fenzi2)
{
break;
}
}
if(count==1)
{
printf("%d/%d",a[count-1],k);
}
else
{
for(int i=0;i<count-1;i++)
{
printf("%d/%d ",a[i],k);
}
printf("%d/%d",a[count-1],k);
}
return 0;
}
标签:code -o art msu lan htm break i++ main
原文地址:https://www.cnblogs.com/houchen/p/9271404.html