LQ0211 奇怪的分式枚举+GCD

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0211 奇怪的分式枚举+GCD相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2014初赛 C++ B组F题

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1 4 \\frac14 41 乘以 8 5 \\frac85 58

小明居然把分子拼接在一起,分母拼接在一起,答案是: 18 45 \\frac1845 4518 (参见下图)

1 4 × 8 5 = 18 45 \\frac14 × \\frac85=\\frac1845 41×58=4518

直接去拼接分子、分母,也可以完成计算?

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1 ~ 9 中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如: 4 1 \\frac41 14 乘以 5 8 \\frac58 85是满足要求的,这算做不同的算式。

但对于分子分母相同的情况, 2 2 \\frac22 22 乘以 3 3 \\frac33 33 这样的类型太多了,不在计数之列!

AC的C语言程序如下:

/* LQ0211 奇怪的分式 */

#include <stdio.h>

int gcd(int n, int m)

    return m ? gcd(m, n % m) : n;


int main()

    int cnt = 0;
    for (int a = 1; a <= 9; a++)
        for (int b = 1; b <= 9; b++) 
            if (b == a)
                continue;
            for (int c = 1; c <= 9; c++)
                for (int d = 1; d <= 9; d++) 
                    if (d == c)
                        continue;

                    int gcd1 = gcd(a * c, b * d);
                    int gcd2 = gcd(a * 10 + c, b * 10 + d);
                    if (a * c / gcd1 == (a * 10 + c) / gcd2 && b * d / gcd1 == (b * 10 + d) / gcd2)
                        cnt++;
                
        
    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0211 奇怪的分式枚举+GCD的主要内容,如果未能解决你的问题,请参考以下文章

LQ0268 古堡算式枚举+进制

LQ0268 古堡算式枚举+进制

LQ0046 凑算式枚举

LQ0064 9数算式枚举

LQ0066 算式900枚举

LQ0076 既约分数GCD