n階幻方問(wèn)題:設(shè)n為奇數(shù)(n∈[3, 19])。試在n´n的表格內(nèi)不重復(fù)地填上1, 2, …, n2數(shù)字,使得橫向、縱向、兩對(duì)角線(xiàn)上數(shù)之和都相等。
1
#include<stdio.h>
2
#include<malloc.h>
3
//此程序適用于幻方問(wèn)題
4
//奇數(shù)階幻方問(wèn)題
5
6
7
//初始化函數(shù)
8
void init(int n,int **rect)
9

{
10
int i = 0;
11
int j = 0;
12
for(i = 0;i<n;i++)
13
{
14
for(j = 0;j<n;j++)
15
{
16
rect[i][j] = 0;
17
}
18
}
19
}
20
21
//計(jì)算函數(shù)
22
void pro(int n,int **rect)
23

{
24
/**//*奇數(shù)階幻方問(wèn)題的規(guī)則是
25
1 把1放到第一行的正中間
26
2 其他數(shù)都放到上一個(gè)數(shù)的右上角
27
3 如果是在第一行,那么把它的行數(shù)變?yōu)閚,列數(shù)加1
28
4 如果是在最后一列,則行數(shù)減1 列數(shù)變?yōu)?
29
5 當(dāng)然了,上面3 4 兩種情況只有最右上角的一個(gè)格會(huì)同時(shí)發(fā)生,而當(dāng)它發(fā)生的時(shí)候,就把該元素直接放到右上角那個(gè)元素的下面即可
30
6 如果后續(xù)的數(shù)所處的位置已有數(shù),則行數(shù)加1 列數(shù)不變
31
32
*/
33
34
35
int i = 0;
36
int j = 0;
37
int currentNum = 2;
38
int final = n*n;
39
j = n/2;
40
rect[i][j] = 1;//把1放到中間的位置
41
for(;currentNum<=final;currentNum++)
42
{
43
j++;
44
i--;
45
//首先處理右上角的元素
46
if(i<0 && j== n)
47
{
48
i+= 2;
49
j--;
50
}
51
else
52
{
53
if(i<0)
54
{
55
i = n-1;
56
}
57
if(j == n)
58
{
59
j = 0 ;
60
}
61
}
62
63
if(rect[i][j] != 0)
64
{
65
66
i+=2;
67
j--;
68
}
69
rect[i][j] = currentNum;
70
}
71
72
}
73
74
75
//打印輸出函數(shù)
76
void print(int n ,int **rect)
77

{
78
int i = 0;
79
int j = 0;
80
for(i = 0;i<n;i++)
81
{
82
for(j= 0;j<n;j++)
83
{
84
printf("%d ",rect[i][j]);
85
}
86
printf("\n");
87
}
88
89
}
90
void main()
91

{
92
int n = 0;
93
int i = 0;
94
int j = 0;
95
int** rect;
96
printf("請(qǐng)輸入一個(gè)奇數(shù)\n");
97
scanf("%d",&n);
98
//OK 成功讀入了數(shù)據(jù)
99
100
//下面創(chuàng)建一個(gè)矩形
101
rect = (int **)malloc(sizeof(int *)*n);
102
for(i = 0;i<n;i++)
103
{
104
rect[i] = (int *)malloc(sizeof(int)*n);
105
}
106
//截止到此,已經(jīng)成功動(dòng)態(tài)創(chuàng)建了這個(gè)數(shù)組
107
108
109
//初始化函數(shù)
110
init(n,rect);
111
//運(yùn)算的函數(shù)
112
pro(n,rect);
113
//下面是打印的函數(shù)
114
print(n,rect);
115
116
117
118
119
120
}
以上就是整理的幻方問(wèn)題的程序,希望各位指正!
posted on 2011-02-16 19:43
崔佳星 閱讀(472)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
數(shù)據(jù)結(jié)構(gòu)和算法