这个题,本来第一想法是用深搜,就像是《啊哈算法》里那样,一边求出所有数的排列,一边输出符合条件的结果。
但是,觉着这样有点麻烦,一时间又没想到更好的方法。
于是就看了题解。
其实思路可以很简单,就是求出来 公因子,然后分别与 a,b,c相乘。然后看看得到的三个数拆开之后是不是正好涵盖了1~9所有的数就可以了QAQ。
虽然都能做出来,但是做算法题,思路才是最重要的。
附上又菜又繁琐的代码:
#include<iostream>
#include<cstring>
using namespace std;
int arr[10];
bool flag2=false;
void judge(int i,int j,int k)
{
int p=i,q=j,r=k;
bool flag=true;
while(i>0) { arr[i%10]=1; i/=10; }
while(j>0) { arr[j%10]=1; j/=10; }
while(k>0) { arr[k%10]=1; k/=10; }
for(int t=1;t<=9;t++)
{
if(arr[t]==0) flag=false;
}
if(flag) { flag2=true; cout<<p<<" "<<q<<" "<<r<<endl; }
memset(arr,0,sizeof(arr));
}
int main()
{
memset(arr,0,sizeof(arr));
int a,b,c;
cin>>a>>b>>c;
int base,j,k;
for(int i=123;i<=987;i++)
{
if(i%a==0)
{
base=i/a;
j=base*b;
k=base*c;
if(k>987) break;
judge(i,j,k);
}
else continue;
}
if(flag2) return 0;
else cout<<"No!!!\n";
return 0;
}
遇到了玄学问题。flag那里本来是想直接return的,但是return不了?????。所以就只能用flag了。。