呵呵,用笨方法找出5个。
//将1-9这九个数字分别填入一个3×3方阵,这样使每一横行的三个数字组成一个三位数。
//如果要使第二行的三位数是第一行的两倍,第三行的三位数是第一行的三倍应怎样填数。编程打印所有方案。
#include <stdio.h>
void main( )
{
int s[3],i,j,k,a1,a2,a3,b1,b2,b3,sum,sum1,sum2,n=0;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
if(i!=j)
for(k=0;k<10;k++)
if(i!=k&&j!=k)
{
sum=i*100+j*10+k;
if(sum<1000)
{
sum1=sum*2;
if(sum1<1000)
{
a1=sum1/100;
a2=sum1%100/10;
a3=sum1%10;
if(a1!=i&&a1!=j&&a1!=k&&a2!=i&&a2!=j&&a2!=k&&a3!=i&&a3!=j&&a3!=k
&&a1!=a2&&a1!=a3&&a2!=a3 )
{
sum2=sum*3;
if(sum2<1000)
{
b1=sum2/100;
b2=sum2%100/10;
b3=sum2%10;
if(b1!=i&&b1!=j&&b1!=k&&b2!=i&&b2!=j&&b2!=k&&b3!=i&&b3!=j&&b3!=k
&& b1!=a1&&b1!=a2&&b1!=a3&&b2!=a1&&b2!=a2&&b2!=a3&&b3!=a1&&b3!=a2&&b3!=a3
&&b1!=b2&&b1!=b3&&b2!=b3 )
{
printf("%5d%5d%5d\n",i,j,k);
printf("%5d%5d%5d\n",a1,a2,a3);
printf("%5d%5d%5d\n\n",b1,b2,b3);
n++;
}
}
}
}
}
}
printf("n=%d\n\n",n);
}