1. 奇数魔方阵: 把整数 1 到 n2 ( n 为奇数,n的平方)排成一个 n*n 方阵,使方阵中的每一行、每一列以及对角线的数之和都相同。
#include <stdio.h> #include <stdlib.h>
void main() { int n = 0; int i = 0, j = 0; int x = 0, y = 0; printf("Input the magic number n:"); scanf("%d", &n);
//分配二维数组空间 int** array = (int**)malloc(sizeof(int*)*n);
for (i = 0; i < n; i++ ) { array[i] = (int*)malloc(sizeof(int)*n); }
//x, y 初始化为'1'存放的位置 x = n/2; y = -1;
for (i = 0; i < n; i++ ) { //设置1,6,11,16,21....存放的位置并赋值 j = i*n + 1; y = (y + 1) % n; array[x][y] = j;
//设置 2,3,4,5; 7,8,9,10....的存放位置并赋值 for ( j = i*n + 2; j <= (i+1)*n; j++ ) { x = (x + 1) % n; y = (y-1+n) % n; array[x][y] = j; } }
//输出魔幻方块 for ( i = 0; i < n; i++ ) { for ( j = 0; j < n; j++ ) { printf("%d\t", array[i][j]); } printf("\n"); } }
这个是在VS.NET2002环境下编译运行成功的!
谁帮我解释一下这个程序呀,这个魔方阵有什么规律可寻呀, 1:它为什么要要先确定1,6,11……的位置呀?
2:开辟空间为什么int** array = (int**)malloc(sizeof(int*)*n)中的int 后面有两个*东西呀?我在课本上看见的都是(int*)malloc(sizeof(int))这样的一个*的……