用1-9九个数字组成三个三位数abc, def, ghi,每个数字恰好使用一次
要求三个数abc:def:ghi = 1 : 2 : 3的所有可能。按照“abc def ghi”格式输出所有解,一行为一个解。样例输出:192 384 576。
数据量级不大,直接暴力求解,每三层循环生成一个abc样的数字:
for(int i =1;i<10;i++){
for(int j=1;j<10;j++){
if(i==j){
continue;
}
for(int t=1;t<10;t++){
if(t==j||t==i)
{
continue;
}
a=i*100+j*10+t; //“abc"样的数字
}
}
}
当然,每次循环要加上判断条件,有相同数字出现时直接进入下次循环。最终判断三个数字是否有1:2:3关系即可,完整代
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a=0,b=0,c=0;
for(int i =1;i<4;i++)
{
for(int j=1;j<10;j++)
{
if(i==j)
{
continue;
}
for(int t=1;t<10;t++)
{
if(t==j||t==i)
{
continue;
}
a=i*100+j*10+t;
for(int k =1;k<9;k++)
{
if(k==i||k==j||k==t)
{
continue;
}
for(int m=1;m<10;m++)
{
if(k==m||m==i||m==j||m==t)
{
continue;
}
for(int n=1;n<10;n++)
{
if(n==m||n==k||n==i||n==j||n==t)
{
continue;
}
b=k*100+m*10+n;
for(int u =1;u<9;u++)
{
if(u==i||u==j||u==t)
{
continue;
}
for(int p=1;p<10;p++)
{
if(u==p||p==i||p==j||p==t||p==m||p==n||p==k)
{
continue;
}
for(int q=1;q<10;q++)
{
if(q==p||q==u||q==i||q==j||q==t||q==m||q==n||q==k)
{
continue;
}
c=u*100+p*10+q;
if(b==a*2&&c==3*a)
printf("%d %d %d\n",a,b,c);
}
}
}
}
}
}
}
}
}
system("pause");
return 0;
}
码如下:
|