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 神奇算式填空题的主要内容,如果未能解决你的问题,请参考以下文章