数组 魔术方阵的实现 书上搬过来的

来源:互联网 发布:大数据有限公司 编辑:程序博客网 时间:2024/05/22 18:22

//p23页

#include <stdio.h>#include <stdlib.h>//奇数魔术方阵#define MAX 15void magic();int square[MAX][MAX];//矩阵最大15*15int N;//实际大小变量int main(){    int i, j;    //读取矩阵大小,是个奇数,0-15之间    printf("\n输入矩阵大小: \n");    scanf("%d", &N);    if( N%2 == 0 || N <= 0 || N >=15)        printf(" 输入出错 \n");    magic();    printf("\n这是一个%d*%d的矩阵\n", N, N);    printf("   ---------\n");    for( i = 0; i < N; i++)    {        for( j = 0; j < N; j++)            printf("%4d", square[i][j]);        printf("\n");    }    return 0;}void magic(){    int key = 1;    int i, j, p, q;    for( i = 0; i < N; i++)    {        for( j = 0; j < N; j++)            square[i][j] = 0;    }    square[0][(N-1)/2] = 1;    key++;    i=0;    j=(N-1)/2;//当前位置    while( key <= N*N )    {        p = (i-1);//p下一步位置横坐标        if( p < 0  )        {            p = N-1;        }        q = (j-1);//q下一步位置纵坐标        if( q < 0 )        {            q = N-1;        }        if( square[p][q] != 0 )        {            i = (i + 1);        }        else        {            i = p;            j = q;        }        square[i][j] = key;        key++;    }}