2013-c-二-2

#include <stdio.h>
#define N 3
//返回值1:满足,0:不满足
//注意二维数组必须指定列数
int fun(int a[][N])
{
   int i,j,s,k;
   int *p=a;
   //判断是否有重复数字
   for(i=0;i<N*N;i++)
   {
       for(j=i+1;j<N*N;j++)
            if(*(p+i)==*(p+j))return 0;
   }
   //判断对角线
   s=a[0][0]+a[1][1]+a[2][2];
   k=a[2][0]+a[1][1]+a[0][2];
   if(s!=k) return 0;
    //判断行是否满足
   for(i=0;i<N;i++)
   {
       k=0;
       for(j=0;j<N;j++) k=k+a[i][j];
       if(k!=s) return 0;
   }
   //判断列是否满足
   for(j=0;j<N;j++)
   {
       k=0;
       for(i=0;i<N;i++) k=k+a[i][j];
       if(k!=s) return 0;
   }
   return 1;
}

//用于测试
int main()
{
    int a[3][3];
   a[0][0]=2;
   a[0][1]=9;
   a[0][2]=4;
   a[1][0]=7;
   a[1][1]=5;
   a[1][2]=3;
   a[2][0]=6;
   a[2][1]=1;
   a[2][2]=8;

   printf("%d",fun(a));
}