三阶幻方

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值