LQ0192 神奇算式填空题

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0192 神奇算式填空题相关的知识,希望对你有一定的参考价值。

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

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

由 4 个不同的数字,组成的一个乘法算式,它们的乘积仍然由这 4 个数字组成。

比如:

210 x 6 = 1260 
8 x 473 = 3784
27 x 81 = 2187 

都符合要求。

如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的 33 种情况,一共有多少种满足要求的算式。

问题分析
用枚举法来解决。

AC的C语言程序如下:

/* LQ0192 神奇算式 */

#include <stdio.h>
#include <string.h>

#define N 10
char cnt1[N], cnt2[N];
int cnt;

int judge2(int a, int b)

    memset(cnt1, 0, sizeof cnt1);
    while (a) 
        int d = a % 10;
        if (++cnt1[d] > 1) return 0;
        a /= 10;
    
    memset(cnt2, 0, sizeof cnt2);
    while (b) 
        int d = b % 10;
        if (++cnt2[d] > 1) return 0;
        b /= 10;
    
    if (memcmp(cnt1, cnt2, N) != 0) return 0;

    return 1;


void judge(int n)

    int d10 = n / 10 % 10;
    int d100 = n / 100 % 10;
    int d1000 = n / 1000;

    if (n % 10 != d10 && d10 != d100 && d100 != d1000) 
        if (d100 != 0) 
            if (judge2(n, d1000 * (n % 1000)))
                cnt++;
        
        if (d10 != 0) 
            int a = n / 100;
            int b = n % 100;
            if (a < b && judge2(n, a * b))
                cnt++;
        
    


int main()

    cnt = 0;
    for (int i = 1023; i <= 9876; i++)
        judge(i);
    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0192 神奇算式填空题的主要内容,如果未能解决你的问题,请参考以下文章

LQ0268 古堡算式枚举+进制

LQ0205 马虎的算式枚举+进制

LQ0064 9数算式枚举

LQ0046 凑算式枚举

LQ0066 算式900枚举

03凑算式(数字填空)