问题描述:
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。
分析:
先单个循环暴力破解,关键是由1-9不重不漏组成。这个地方用1-9和为45积为362880来判断就OK。
代码:
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
int check[9];
for(int a=123; a<=333; a++)
{
b=2*a;
c=3*a;
int i=0;
check[i++]=a%10;//偷懒,也可以写0,1,2......
check[i++]=a/10%10;
check[i++]=a/100;
check[i++]=b%10;
check[i++]=b/10%10;
check[i++]=b/100;
check[i++]=c%10;
check[i++]=c/10%10;
check[i++]=c/100;
int sum=0;
int asum=1;
for(i=0; i<9; i++)
{
sum+=check[i];
asum*=check[i];
}
if(sum==45&&asum==362880)
cout<<a<<" "<<b<<" "<<c<<endl;
}
return 0;
}
运行结果:
我们检查一下输出是否不重复不遗漏,这样子就够了。
如果觉得不够保险,也可以用一个数组保存1-9的次数,或者用STL里面的set来保存,然后检查长度是否为9以及第一个元素是否为0.