1148: 组合三位数之一
题目描述
把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。
输入
无
输出
按从小到大的顺序输出这三个三位数,由空格隔开,结果应该为
361 529 784
说明
完全平方数指的是:一个数可以表示成某两个数的乘积,且这两个数相同 例如x=a*a ,那么称这个数为完全平方数
代码
#include<stdio.h>
#include<math.h>
int PanDuan(int a,int b,int c); //判断组成三个数的数字是否存在重复
int main()
{
int i,j,k,x,n,num[20],t=0;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
for(k=1;k<=9;k++)
{
if(i==j||i==k||j==k) //不允许数字重复使用
continue; //重复了就结束本次循环
n=i*100+j*10+k; //组成的三位数
x=sqrt(n);
if(x*x==n) //为真说明这个三位数是完全平方数,将其存入数组
num[t++]=n;
}
//遍历数组,找出不重复的一组完全平方数
for(i=0;i<t;i++)
for(j=i;j<t;j++)
for(k=j;k<t;k++)
{
if(PanDuan(num[i],num[j],num[k])) //如果三个数由不重复的数字组成,输出
printf("%d %d %d\n",num[i],num[j],num[k]);
}
return 0;
}
int PanDuan(int a,int b,int c)
{
int i,digit[10]={0};
while(a)
{
i=a%10; //x代表其最后一位
digit[i]++;
a/=10;
}
while(b)
{
i=b%10;
digit[i]++;
b/=10;
}
while(c)
{
i=c%10;
digit[i]++;
c/=10;
}
for(i=1;i<=9;i++)
{
if(digit[i]!=1) //不是1说明存在重复的数字
return 0;
}
return 1;
}