9数算式
题目描述
观察如下的算式:9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
- 总数目包含题目给出的那个示例。
- 乘数和被乘数交换后作为同一方案来看待。
输出
输出一个整数表示答案
#include <iostream>
using namespace std;
int num[10];
bool vis[10];
int sum;
bool multi(long long x,long long y){
long long z,z0;
z=x*y;
z0=z;
if(z<100000000) return false;
bool visz[10]={false,false,false,false,false
,false,false,false,false,false};
int q,w,e,flag=0;
while(z!=0){
q=z%10;
if(q==0) return false;
if(!visz[q]){
visz[q]=true;
flag++;
}
else{
return false;
}
z=z/10;
}
for(int i=1;i<10;i++){
visz[i]=false;
}
return true;
}
void dfs(int index){
long long k=0;
long long x=0;
long long y=0;
if(index == 10){
for(int i=1;i<9;i++){
for(int j=1;j<=i;j++){
x = x*10+num[j];
}
for(int l=i+1;l<10;l++){
y = y*10 + num[l];
}
if(multi(x,y)){
sum++;
}
x=0; y=0;
}
}
for(int i=1;i<10;i++){
if(!vis[i]){
vis[i]=true;
num[index]=i;
dfs(index+1);
vis[i]=false;
}
}
}
int main() {
for(int i=0;i<10;i++){
vis[i]=false;
}
dfs(1);
cout<<sum/2;
return 0;
}
答案是1625. 在OJ上提交答案正确。