蓝桥杯Problem B: 奇怪的分式

来源:互联网 发布:java线程池框架 编辑:程序博客网 时间:2024/05/16 12:51
问题及代码:

Problem B: 奇怪的分式

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 1142  Solved: 541
[Submit][Status][Web Board]

Description

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 
 1/4 乘以 8/5  
 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 
对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 
请写出所有不同算式的个数(包括题中举例的)。 
显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。 
但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

请输出所有满足小明新算法的分式组合,以及这类分数组合的个数。

Input

没有输入

Output

请输出所有满足小明新算法的分式组合,以及这类分数组合的个数。

Sample Output

1/2 5/41/4 8/51/6 4/31/6 6/4...9/4 8/9n

#include <stdio.h>int gcd(int m,int n)//求最大公约数{    int t;    if(m<n)    {        t=m;        m=n;        n=t;    }    while(m%n!=0)    {        t=m%n;        m=n;        n=t;    }    return n;}int main(){    int a,b,c,d;    int m,n,p,q;    int i,j;    int count=0;    for(a=1;a<=9;a++)    {        for(b=1;b<=9;b++)        {            if(a==b)                continue;            for(c=1;c<=9;c++)            {                for(d=1;d<=9;d++)                {                    if(c==d)                        continue;                    m=a*c;                    n=b*d;                    p=a*10+c;                    q=b*10+d;                    i=gcd(m,n);//求最大公约数                    j=gcd(p,q);                    m/=i;                    n/=i;                    p/=j;                    q/=j;                    if(m==p&&n==q)//约分后是否相等                    {                        printf("%d/%d %d/%d\n",a,b,c,d);                        count++;                    }                }            }        }    }    printf("%d\n",count);    return 0;}

此题需要注意的就是约分,即求最大公约数。

约分后才可判断是否相等.
0 0