题目描述
把1,2,3,4,5,6,7,8,9,组成三个三位数(每个数只能用一次),第二个数是第一个数的2倍,第三个数是第一个数的3倍,这三个三位数各是多少?答案可能有很多组,请按第一个数的升序顺序输出每组的三个三位数。
输入
无
输出
输出所有满足条件的三位数组合,按第一个数的升序顺序输出。
样例输出 Copy
192 384 576 .........
立志成为一方大佬!
#include<stdio.h>
int main()
{
int s[864]={0};//保存个位十位百位不相同的三位数
int a[864][3]={0};//保存三位数中个位十位百位
int t[3]={0};
int i,j=0;
int b,k,n=0;
for(i=123;i<=987;i++)
{
t[0]=i%10;
t[1]=i/10%10;
t[2]=i/100;
if((t[0]-t[1])*(t[1]-t[2])*(t[0]-t[2])!=0&&t[0]!=0&&t[1]!=0) //排除个位十位百位数字相同的三位数,以及个位十为0的数字
{
//将满足上述条件的数字保存到数组中
a[j][0]=t[0];
a[j][1]=t[1];
a[j][2]=t[2];
s[j]=i;
j++;
}
}
for(i=0;i<j-2;i++)
{
for(b=i+1;b<j-1;b++)
{
for(k=b+1;k<j;k++)
{
if(s[k]==3*s[i]&&s[b]==2*s[i])
{int zon[9]={0};
zon[a[i][0]-1]=1;
zon[a[i][1]-1]=1;
zon[a[i][2]-1]=1;
zon[a[b][0]-1]=1;
zon[a[b][1]-1]=1;
zon[a[b][2]-1]=1;
zon[a[k][0]-1]=1;
zon[a[k][1]-1]=1;
zon[a[k][2]-1]=1;
//执行到此时数组zon中的9个元素,不是0就是1
for(n=0;n<9;n++)
{
if(zon[n]==0)
break;
}
if(n==9)//当数组zon中的元素全为1时,说明数组s[i],s[b],s[k]三个数各个数字均不同
{
printf("%d %d %d\n",s[i],s[b],s[k]);
}
}
}
}
}
return 0;
}