题目:用1,2,3……9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。
问题分析:设这三个数从小到大分别为x,y,z。则x:y:z=1:2:3; 则123<x<330。构建一个数组来记录1-9这9个数组是否出现过,出现过设为1,不出现设为0。最后对数组求和,如果和等于9说明这九个数字都出现过,输出解。否则继续查找,知道循环结束。
源代码如下:
#include<iostream>
using namespace std;
int main(){
int a[10]={0};//记录各个数字是否出现
int x,y,z;
int s=0;//数组求和
for(x=100;x<333;++x){
y=2*x;
z=3*x;
a[x/100]=a[x/10%10]=a[x%10]=1;//记录x中出现的数字,并设为1
a[y/100]=a[y/10%10]=a[y%10]=1;
a[z/100]=a[z/10%10]=a[z%10]=1;
for(int i=1;i<10;++i){
s+=a[i];
}
if(s==9){
cout<<x<<" "<<y<<" "<<z<<endl;
}
s=0;
for(int i=1;i<10;++i){
a[i]=0;
}
}
return 0;
}