LQ0205 马虎的算式枚举+进制

Posted 海岛Blog

tags:

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

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

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

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

有一次,老师出的题目是:36x495=?
他却给抄成了:396x45=?
但结果却很戏剧性,他的答案竟然是对的!!

因为 36∗495=396∗45=17820。

类似这样的巧合情况可能还有很多,比如:27∗594=297∗54。

假设a b c d e 代表 1 ~ 9 不同的 5 个数字(注意是各不相同的数字,且不含 0 )

能满足形如: ab∗cde=adb∗ce 这样的算式一共有多少种呢?

请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。

问题分析
枚举5位数,最小的各位数字不同的5位数是12345, 最大的各位数字不同的5位数是98765。
再根据进制原理进行判定。

AC的C语言程序如下:

/* LQ0205 马虎的算式 */

#include <stdio.h>

int main()

    int cnt = 0;
    for (int i = 12345; i <= 98765; i++) 
        int a = i / 10000;
        int b = i / 1000 % 10;
        int c = i / 100 % 10;
        int d = i / 10 % 10;
        int e = i % 10;
        if (b == 0 || c == 0 || d == 0 || e == 0)
            continue;
        if (a == b || a == c || a == d || a == e ||
                b == c || b == d || b == e ||
                c == d || c== e || d == e)
            continue;
        if ((i / 1000) * (i % 1000) == (a * 100 + d * 10 + b) * (c * 10 + e))
            cnt++;
    

    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0205 马虎的算式枚举+进制的主要内容,如果未能解决你的问题,请参考以下文章

LQ0268 古堡算式枚举+进制

LQ0268 古堡算式枚举+进制

2013_B t2马虎算式

练习题:马虎的算式 两个error

LQ0046 凑算式枚举

LQ0064 9数算式枚举