[蓝桥杯2017初赛]9数算式
题目描述
观察如下的算式:9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
- 总数目包含题目给出的那个示例。
- 乘数和被乘数交换后作为同一方案来看待
#include <iostream>
#include <vector>
#include<algorithm>
#include<map>
#include<math.h>
#define ll long long
using namespace std;
int main(){
int a[9]={1,2,3,4,5,6,7,8,9};
int cnt=0;
do{
for(int i=0;i<8;i++){
int b[10]={0};
long long c1=0,c2=0,c3=0,sum=0;
for(int k=0;k<=i;k++){//l
c1=c1*10+a[k];
}
for(int j=i+1;j<9;j++){//r
c2=c2*10+a[j];
}
c3=c1*c2;
while(c3){
if(b[c3%10]==0&&c3%10!=0){
b[c3%10]=1;
sum++;
}
c3/=10;
}
if(sum==9){
cnt++;
}
}
}while(next_permutation(a,a+9));
cout<<cnt/2<<endl;
return 0;
}
记录next_permutation(a,a+n)的用法