题目链接:https://projecteuler.net/problem=32
直接枚举所有的排列然后暴力就好了
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int x[]={1,2,3,4,5,6,7,8,9};
map<int,bool> bk;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
ll ans=0;
do
{
for(int i=0;i<9;i++)
{
for(int j=i+1;j<8;j++)
{
ll a=0,b=0,c=0;
for(int k=0;k<=i;k++)
{
a*=10;
a+=x[k];
}
for(int k=i+1;k<=j;k++)
{
b*=10;
b+=x[k];
}
for(int k=j+1;k<9;k++)
{
c*=10;
c+=x[k];
}
if(bk.find(c)!=bk.end())
{
continue;
}
if(a*b==c)
{
bk[c]=true;
ans+=c;
}
}
}
}while(next_permutation(x,x+9));
printf("%lld\n",ans);
return 0;
}