三阶幻方

复制代码
 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 }
复制代码

posted @   Please Call me 小强  阅读(387)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示