LQ0064 9数算式枚举
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0064 9数算式枚举相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2017初赛 Java A组H题
题目描述
观察如下的算式:9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
- 总数目包含题目给出的那个示例。
- 乘数和被乘数交换后作为同一方案来看待。
输出格式
输出一个整数表示答案
问题分析
用枚举法来实现。
AC的C++语言程序如下:
/* LQ0064 9数算式 */
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[] = 1, 2, 3, 4, 5, 6, 7, 8, 9;
bool judge(int n)
bool flag[10];
memset(flag, false, sizeof flag);
while (n)
int d = n % 10;
if (d == 0) return false;
if (flag[d]) return false;
flag[d] = true;
n /= 10;
for (int i = 1; i <= 9; i++)
if (flag[i] == false) return false;
return true;
int main()
int cnt = 0, t1, t2;
do
// 1 + 8
t1 = a[0];
t2 = a[1] * 10000000 + a[2] * 1000000 + a[3] * 100000 + a[4] * 10000 +
a[5] * 1000 + a[6] * 100 + a[7] * 10 + a[8];
if (judge(t1 * t2)) cnt++;
// 2 + 7
t1 = t1 * 10 + a[1];
t2 %= 10000000;
if (judge(t1 * t2)) cnt++;
// 3 + 6
t1 = t1 * 10 + a[2];
t2 %= 1000000;
if (judge(t1 * t2)) cnt++;
// 4 + 5
t1 = t1 * 10 + a[3];
t2 %= 100000;
if (judge(t1 * t2)) cnt++;
while (next_permutation(a, a + 9));
printf("%d\\n", cnt);
return 0;
以上是关于LQ0064 9数算式枚举的主要内容,如果未能解决你的问题,请参考以下文章