1148: 组合三位数之一
题目描述
把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。
输入
无
输出
按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。
来源/分类
#include<stdio.h>
#include<string.h>
#define N 20
/*
先找出三位数完全平方数
然后依次找出不重复的
*/
//判断两个三位数是否有重复的数字,没有重复返回1
int Isrepeat(a,b){
if(b%10==a%10||b%10==a/10%10||b%10==a/100) return 0;
if(b/10%10==a%10||b/10%10==a/10%10||b/10%10==a/100) return 0;
if(b/100==a%10||b/100==a/10%10||b/100==a/100) return 0;
return 1;
}
int main(){
int a[N],x,y=0,i,j,k;
//直接找到各位不重复的三位数,可缩小范围(13-31)
for(i=13;i<32;i++){
x=i*i;
if((x%10!=x/100)&&(x/100!=x/10%10)&&(x%10!=x/10%10)) a[y++]=x;
}
//三层循环找到三个都不重复的三位数,且有顺序
for(i=0;i<y-2;i++){
for(j=i+1;j<y-1;j++){
for(k=j+1;k<y;k++){
if(Isrepeat(a[i],a[j])&&Isrepeat(a[j],a[k])&&Isrepeat(a[i],a[k]))
printf("%d %d %d\n",a[i],a[j],a[k]);
}
}
}
return 0;
}