1062. 最简分数(20)

一个分数一般写成两个整数相除的形式:N/M,其中M不为0。最简分数是指分子和分母没有公约数的分数表示形式。

现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为K的最简分数。

输入格式:

输入在一行中按N/M的格式给出两个正分数,随后是一个正整数分母K,其间以空格分隔。题目保证给出的所有整数都不超过1000。

输出格式:

在一行中按N/M的格式列出两个给定分数之间分母为K的所有最简分数,按从小到大的顺序,其间以1个空格分隔。行首尾不得有多余空格。题目保证至少有1个输出。

输入样例:

7/18 13/20 12

输出样例:

5/12 7/12

code:
 1 #include <stdio.h>
 2 
 3 int as(int a,int b)
 4 {
 5     int i = a>b?a:b;
 6     while(i%a != 0||i%b != 0)
 7         i++;
 8     return i;
 9 }
10 
11 int bs(int a,int b)
12 {
13     int i = a<b?a:b;
14     int j = 2;  // 6 9
15     for(;j <= i;j++)
16     {
17         if(a%j == 0&&b%j == 0)
18             return 1;
19     }
20     return 0;
21 }
22 
23 int main()
24 {
25     int n1,n2,m1,m2,k,i;
26     scanf("%d/%d",&n1,&n2);
27     scanf("%d/%d%d",&m1,&m2,&k);
28 // 7/18  13/20 12
29     int a = as(n2,m2);
30     int b = as(a,k);
31     int n = n1*(b/n2);
32     int m = m1*(b/m2);
33 //    70/180  117/180;     
34     if(n > m)
35     {
36         int tmp = n;
37         n = m;
38         m = tmp;
39     }
40 //    printf("%d %d %d %d",a,b,n,m);    
41       //70/12*15
42     int flag = 0;
43     for(i = n+1;i < m;i++)
44     {
45         if(i%(b/k) == 0 && bs(k,i/(b/k)) == 0)
46         {
47             if(flag != 0)    
48                 printf(" ");
49             printf("%d/%d",(i/(b/k)),k);
50             flag = 1;
51         }
52             
53     }
54     
55 }

 

转载于:https://www.cnblogs.com/huyuan1004/p/7284723.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值