传送门
思路:全排列搞一下,然后枚举乘的位置,再判断一下是否符合题意即可。大概几秒就能出结果
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
int a[9]={1,2,3,4,5,6,7,8,9};
set<ll>ans;
void fun(int x)
{
ll res1=0,res2=0;
for(int i=x,j=1;i>=0;i--,j*=10){
res1=a[i]*j+res1;
}
for(int i=8,j=1;i>x;i--,j*=10){
res2=a[i]*j+res2;
}
ll res=res1*res2;
set<int>s;
while(res){
if(res%10!=0)
s.insert(res%10);
res/=10;
}
if(s.size()==9){
ans.insert(res1*res2);
}
}
int main()
{
int res=0;
do{
for(int i=0;i<8;i++){
fun(i);
}
}while(next_permutation(a,a+9));
for(auto x:ans){
cout<<x<<'\n';
}
// cout<<res<<'\n';
return 0;
}
/*
839542176
*/