用1-9组成三个3位的平方数
将1,2,3,4,5,6,7,8,9,九个数字分成三组,每个数字只能用一次,既每组三个数,不允许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数.
(这两天真的头晕死啦~~~)
第一题
这种是死办法,穷举法,暂时没有好的方法,只能找一个解
没有编译过,可能有错
int i,j,k,t1,t2,t3,s[10]={0};
for(i=13;i<32;i++)
{ t1=i*i;
if(s[t1%10]==0&&s[t1/10%10]==0&&s[t1/100]==0)
{ s[t1%10]=s[t1/10%10]=s[t1/100]=1;
for(j=i;j<32;j++)
{ t2=j*j;
if(s[t2%10]==0&&s[t2/10%10]==0&&s[t2/100]==0)
{ s[t2%10]=s[t2/10%10]=s[t2/100]=1;
for(k=j;k<32;k++)
{ t3=k*k;
if(s[t3%10]==0&&s[t3/10%10]==0&&s[t3/100]==0)
{ s[t3%10]=s[t3/10%10]=s[t3/100]=1;
printf("%d,%d,%d\n",t1,t2,t3);
exit();
}
}
}
}
}
}
main() { int flag[10]={0},i,i1,i2,t=0,c,a,j;
for(i=10;i<32;i++) for(i1=10;i1<32;i1++) if(i1>i) for(i2=10;i2<32;i2++) if(i2>i1&&i2>i) { c=i*i; while(c){a=c%10;c/=10;flag[a]=a;} c=i1*i1; while(c){a=c%10;c/=10;flag[a]=a;} c=i2*i2; while(c){a=c%10;c/=10;flag[a]=a;} for(j=1;j<10;j++) {if (flag[j]!=0)t++; flag[j]=0; } if (t==9)printf("%d %d %d %d %d %d\n",i,i1,i2,i*i,i1*i1,i2*i2); t=0; } }