题面
本文主要记录该题涉及的重要的编程思想
code的本质是搜索,但是从哪个角度搜索,其复杂度大相径庭
两种可行的搜索思路:
- 把
1..9
这9个数的全排列作为搜索空间(9*8*7*...*1=362880)
,判断每种情况是否满足1:2:3
的比例关系 - 把
100..333
作为搜索空间(334个数)
,判断每种情况是否属于1..9
这9个数的全排列
第一种搜索方式,全排列空间的遍历很难写,搜索空间很大
第二种搜索方式,单层for
循环就能解决问题,搜索空间较小
AC代码如下:
/*********************************************************
*
*
*
*
*********************************************************/
#include<cstdio>
#include<cstring>
int tong[9];
bool func(int a){
while(a!=0){
int tmp = a%10;
if(tmp==0)return false;
if(tong[tmp-1]==0)tong[tmp-1]=1;
else return false;
a/=10;
}
return true;
}
int main(){
for(int i=100;i*3<1000;i++){
memset(tong, 0, sizeof(tong));
if(!(func(i) && func(i*2) && func(i*3)))continue;
printf("%d %d %d\n", i, i*2, i*3);
}
return 0;
}