1 #include<stdio.h> 2 3 //功能:如果数组x的每个元素都不相等,返回1,否则,返回0 4 int fun(int **x,int n) 5 { 6 char flag[12]={0}; 7 for(int i=0;i<n;i++) 8 for(int j=0;j<n;j++) 9 { 10 if(!x[i][j]) break; 11 if(flag[x[i][j]]) 12 return 0; 13 else 14 flag[x[i][j]]=1; 15 } 16 return 1; 17 } 18 19 //功能:判断数组x每行每列,对角线和都相等,如果相等,返回1,否则返回0 20 int f(int **x,int n) 21 { 22 int sum=0,s=0,i,j; 23 //计算对角线的和 24 for(i=0;i<n;i++) 25 { 26 sum+=x[i][i]; 27 s+=x[i][n-i-1]; 28 } 29 if(sum!=s) return 0; 30 //计算行 31 for(i=0;i<n;i++) 32 { 33 s=0; 34 for(j=0;j<n;j++) 35 s+=x[i][j]; 36 if(sum!=s)return 0; 37 } 38 //计算列 39 for(i=0;i<n;i++) 40 { 41 for(j=0,s=0;j<n;j++) 42 s+=x[j][i]; 43 if(sum!=s)return 0; 44 } 45 return 1; 46 } 47 48 //动态申请空间 49 int **u(int x,int y) 50 { 51 int **p=new int *[x]; 52 for (int i=0;i<x;i++) 53 p[i] = new int[y]; 54 return p; 55 } 56 int main() 57 { 58 int n=3; 59 int **i=u(n,n); 60 int j,k,count=0; 61 for(j=0;j<n;j++) 62 { 63 for(k=0;k<n;k++) 64 i[j][k]=0; 65 } 66 for(i[0][0]=1;i[0][0]<=9;i[0][0]++)//1 67 for(i[0][1]=1;i[0][1]<=9;i[0][1]++)//2 68 for(i[0][2]=1;i[0][2]<=9;i[0][2]++)//3 69 for(i[1][0]=1;i[1][0]<=9;i[1][0]++)//4 70 for(i[1][1]=5;i[1][1]<=5;i[1][1]++)//5 71 for(i[1][2]=1;i[1][2]<=9;i[1][2]++)//6 72 for(i[2][0]=1;i[2][0]<=9;i[2][0]++)//7 73 for(i[2][1]=1;i[2][1]<=9;i[2][1]++)//8 74 for(i[2][2]=1;i[2][2]<=9;i[2][2]++)//9 75 if(fun(i,3)&&f(i,3)) 76 { 77 printf("\n第%d种\n",++count); 78 for(j=0;j<3;j++) 79 { 80 for(k=0;k<3;k++) 81 printf("%3d",i[j][k]); 82 printf("\n"); 83 } 84 } 85 getchar(); 86 return 0; 87 }
转载于:https://www.cnblogs.com/dzqdzq/archive/2013/05/05/3061484.html