试题分析:将 1到9九个数分成 3 组,分别组成 3 个三位数,且使这 3个三位数构成 1:2:3的比例,数值较小,所以暴力枚举
算法分析:因为4*3=12,超过了10,所以百位的数最多为3,因为1到9每个数都要出现,所以不超过1000,且要判断是否全部出现,可以通过从第一个数高位往下依次乘应乘的倍数,过10便分离高位加1,最后判断是否有重复的
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,j,m,a,b,c,d[11],ij,bj,ijj,flag;
for(i=1;i<=3;i++){
for(j=1;j<=9;j++){
if(i!=j){
for(m=1;m<=9;m++){
if(i!=m&&j!=m&&(i*100+j*10+m)*3<1000){
a=i*100+j*10+m;
b=(i*100+j*10+m)*2;
c=(i*100+j*10+m)*3;
d[1]=m;
d[2]=i;
d[3]=j;
bj=4;
for(ij=2;ij<=3;ij++){
d[bj]=ij*i;
bj++;
d[bj]=ij*j;
if(ij*j>10){
d[bj-1]=d[bj-1]+d[bj]/10;
d[bj]=d[bj]%10;
}
bj++;
d[bj]=ij*m;
if(ij*m>10){
d[bj-1]=d[bj-1]+d[bj]/10;
d[bj]=d[bj]%10;
}
bj++;
}
flag=0;
for(ij=1;ij<=8;ij++){
for(ijj=ij+1;ijj<=9;ijj++){
if(d[ij]==d[ijj]){
flag=1;
break;
}
}
if(flag==1){
break;
}
}
if(flag==0){
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
}
}
}
}
return 0;
}