以下是引用rjsp在2022-7-8 22:44:32的发言:
幻方吗?
那 num_out(3) 与 num_out(5) 都是奇数阶幻方,为什么使用的竟然不是同一种方法?
只要,实现水平,垂直,对角线和相等,就可以了。
不要问,为什么结果不一样。
这不是,程序计算出来的。这是我以前,人工计算出来的。
只为了,说明一下 水平,垂直,对角线和相等。。。。
我根本,没有写计算函数。

程序代码:
char number[4][36]={{ 6, 1, 8, 7, 5, 3, 2, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 2,15,16,12,14, 3, 5,13, 7,10, 4, 8,11, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{14, 9, 1,19,22,23,18, 2,16, 6,21,11,13,15, 5, 3,10,24, 8,20, 4,17,25, 7,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 5,34,27,18,26, 7,32, 9,21,22,20,30, 2,31,16,15,17, 4,29, 6,24,25,23,36, 8,28,13,12,14,33,35, 3,10,19,11}};
void num_out(char num)
{
for(char i=0; i<num; i++)
{
for(char j=0; j<num; j++)
printf("%3d", number[num-3][i*num+j]);
printf("\n");
}
}
直接输出数组,根本没计算
奇数计算程序如下

程序代码:
#include <stdio.h>
#define N 5 //3, 5, 7, 9 行、列数
int main()
{
int a[N][N] = {0};
int count =1 ;
int row = 0, cul = N / 2;
while (count <= N*N)
{
a[row][cul] = count;
int i = row;
int j = cul;
if (i == 0)
{
i = N - 1;
}
else
{
i--;
}
j = (j +1) % N;
if (a[i][j]!=0||(row==0&&cul==N-1))
{
i = row + 1;
j = cul;
}
row = i;
cul = j;
count++;
}
for (int i =0 ; i < N; i++)
{
for (int j =0 ; j < N; j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
}
偶数如何计算。。。不会。。。。。。。。。
[此贴子已经被作者于2022-7-9 02:40编辑过]