不能直接枚举O(n^3)必T无疑
你枚举一个数后另外两个数就已经确定了,然后判断,总枚举状态数O(n)
```cpp
#include<bits/stdc++.h>
using namespace std;
int a,b,c,A,B,C,used[10];bool flag;
int main()
{
cin>>A>>B>>C;
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
for(int k=1;k<=9;k++)
{
memset(used,0,sizeof(used));
a=i*100+j*10+k;
if(B*a%A!=0)continue;else b=B*a/A;
if(C*a%A!=0)continue;else c=C*a/A;
if(c>=1000)continue;
used[i]=1;
if(used[j]==1||j==0)continue;else used[j]=1;
if(used[k]==1||k==0)continue;else used[k]=1;
if(used[b%100/10]==1||(b%100/10)==0)continue;else used[b%100/10]=1;
if(used[c%100/10]==1||(c%100/10)==0)continue;else used[c%100/10]=1;
if(used[b/100]==1||(b/100)==0)continue;else used[b/100]=1;
if(used[c/100]==1||(b/100)==0)continue;else used[c/100]=1;
if(used[b%10]==1||(b%10)==0)continue;else used[b%10]=1;
if(used[c%10]==1||(b%10)==0)continue;else used[c%10]=1;
cout<<a<<" "<<b<<" "<<c<<endl;flag=1;
}
}
}
if(!flag)cout<<"No!!!";
return 0;
}
```
by huangsy @ 2019-02-02 18:07:30
因为此题正解是dfs+剪枝
by 万弘 @ 2019-02-02 18:38:38
```cpp
for(int i=123;i<=987;i++)
{
j=i*b/a;k=i*c/a;
if(f(i,j,k)==1&&j<=987&&k<=987)
{
printf("%d %d %d\n",i,j,k);
count++;
}
}
```
这样子ac了
by sunzhen @ 2019-02-02 18:43:25
for(int i=123;i<=987;i++)
{
int ans=0;
int num[11]={0,1,2,3,4,5,6,7,8,9};
for(int j=1;j<=9;j++)
{
if(i/100==num[j]||(i/10)%10==num[j]||i%10==num[j])
{
ans++;
num[j]=0;
}
}
if(ans!=3)
continue;
else
{
k=i*b/a;
if(k>999)
continue;
for(int j=1;j<=9;j++)
{
if(num[j]==0)
continue;
if(k/100==num[j]||(k/10)%10==num[j]||k%10==num[j])
{
ans++;
num[j]=0;
}
}
if(ans!=6)
continue;
else
{
l=i*c/a;
if(l>999)
continue;
for(int j=1;j<=9;j++)
{
if(num[j]==0)
continue;
if(l/100==num[j]||(l/10)%10==num[j]||l%10==num[j])
{
ans++;
num[j]=0;
}
}
if(ans!=9)
continue;
else
{
cout<<i<<" "<<k<<" "<<l<<endl;
flag++;
}
}
}
}
if(flag==0)
cout<<"No!!!";
暴力解法
by zhensama @ 2019-02-02 19:49:36
~~暴力判断~~
by whatismyname0 @ 2019-02-14 11:15:21