题目:九数算式
观察如下的算式:
9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
- 总数目包含题目给出的那个示例。
- 乘数和被乘数交换后作为同一方案来看待。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int cnt[10];
bool check(int n, int m)
{
long long c = n*m;
if(c > 990000000) return false;
memset(cnt, 0, sizeof cnt);
for(int i = 0; i < 9; i++)
{
int x = c % 10;
c /= 10;
if(cnt[x] >= 1) return false;
else cnt[x]++;
}
for(int i = 1; i <= 9; i++)
if(cnt[i] == 0) return false;
return true;
}
int main()
{
int ans = 0;
do
{
int q = 0;
for(int i = 0; i < 9; i++)
q = q * 10 + n[i];
int t = 1;
for(int i = 1; i <= 8; i++)
{
t *= 10;
int n = q / t;
int m = q % t;
if(check(n, m))
ans++;
}
}while(next_permutation(n, n + 9));
cout << ans/2 << endl;
return 0;
}