题目描述
算法提高 寻找三位数时间限制:1.0s 内存限制:512.0MB
问题描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成
1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
输入格式
无输入文件
输出格式
输出每行有三个数,为满足题设三位数。各行为满足要求的不同解。
思路:可以深搜搜索1-9的全排列,注意数字不能重复,但是不如直接9层循环暴力跑省事,跑出来直接打表完事.....
#include<stdio.h>//打表代码
#include<string.h>
int main()
{
int x1,x2,x3,x4,x5,x6,x7,x8,x9,i,j,k,m,n;
int a[20];//记录每个数字出现的次数
for(x1=1;x1<=9;x1++)
{
for(x2=1;x2<=9;x2++)
for(x3=1;x3<=9;x3++)
for(x4=1;x4<=9;x4++)
for(x5=1;x5<=9;x5++)
for(x6=1;x6<=9;x6++)
for(x7=1;x7<=9;x7++)
for(x8=1;x8<=9;x8++)
for(x9=1;x9<=9;x9++)
{
memset(a,0,sizeof(a));
/* for(i=1;i<=9;i++)
printf("%d ",a[i]);*/
a[x1]++;
a[x2]++;
a[x3]++;
a[x4]++;
a[x5]++;
a[x6]++;
a[x7]++;
a[x8]++;
a[x9]++;
int f=0;
for(i=1;i<=9;i++)
{
// printf("%d ",a[i]);
if(a[i]==1)//判断每个数字是否出现一回
{
f++;
}
}
// printf("\n");
if(f==9)
{ int a=x1*100+x2*10+x3;
int b=x4*100+x5*10+x6;
int c=x7*100+x8*10+x9;
if(a+b==c)
{
// printf("%d %d %d\n",a,b,c);
if(c/a==3&&c%a==0&&b/a==2&&b%a==0)
{
printf("%d %d %d\n",a,b,c);
}
// printf("%d%d%d %d%d%d %d%d%d\n",x1,x2,x3,x4,x5,x6,x7,x8,x9);
}
}
}
}
return 0;
}
//打出来的表,就四组数据..
#include<stdio.h>
#include<string.h>
int main()
{
int x1,x2,x3,x4,x5,x6,x7,x8,x9,i,j,k,m,n;
printf("192 384 576\n");
printf("219 438 657\n");
printf("273 546 819\n");
printf("327 654 981\n");
return 0;
}