1148: 组合三位数之一
题目描述
把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。
输入
无
输出
按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。
C
方法一
#include<stdio.h>
int main()
{
printf("361 529 784\n");
return 0;
}
方法二
#include<stdio.h>
#include<math.h>
int main()
{
int s[15];
int x,n,i=0,j,k,a,b,c,l;
for(a=1;a<=9;a++)
for(b=1;b<=9;b++)
for(c=1;c<=9;c++){
if(a==b||a==c||b==c)
continue;
x=a*100+b*10+c;
n=sqrt(x);
if(n*n==x)//找出所有三位数中的完全平方数
s[i++]=x;
}
l=i;
for(i=0;i<l-2;i++)
for(j=i+1;j<l-2;j++)
for(k=j+1;k<l;k++)
if((s[i]%10+s[i]/10%10+s[i]/100+s[j]%10+
s[j]/10%10+s[j]/100+s[k]%10+s[k]/10%10+
s[k]/100==1+2+3+4+5+6+7+8+9) &&
((s[i]%10)*(s[i]/10%10)*(s[i]/100)*
(s[j]%10)*(s[j]/10%10)*(s[j]/100)*
(s[k]%10)*(s[k]/10%10)*(s[k]/100)==
1*2*3*4*5*6*7*8*9))
{
printf("%d %d %d\n",s[i],s[j],s[k]);
}
return 0;
}