数阵小算法

来源:互联网 发布:windows如何更新系统 编辑:程序博客网 时间:2024/05/22 15:39

数阵,每行,每列,对角线之和均相等

#include <stdio.h># define Max 20void main(){    void create(int n);    int n;    printf("input number:");    scanf("%d",&n);    create(n);}void create(int n){    int a[Max][Max],k,l;    for(k=0;k<n;k++)//初始化0,置标记    {   for(l=0;l<n;l++)            a[k][l]=0;    }    a[0][n/2]=1;//初始化1    int prei=0,prej=n/2;//记录前驱下标    int count=1;    int indexi,indexj;//当前下标    while(count<n*n)//魔方数字个数    {        indexi=(prei-1+n)%n;        indexj=(prej+1)%n;        if(a[indexi][indexj]==0)        {               a[indexi][indexj]=++count;            prei=indexi;//前驱小标移动            prej=indexj;        }        else//回退,利用前驱找空位置        {            while(a[(prei+1)%n][prej]!=0)//上一个数的下面            {                prei=(prei+1)%n;                prej=(prej-1+n)%n;            }            prei=(prei+1)%n;//行+1,列不变            a[prei][prej]=++count;        }    }    //输出    for(k=0;k<n;k++)    {   for(l=0;l<n;l++)            printf("%4d ",a[k][l]);    printf("\n");    }}       

input number:5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Press any key to continue

0 0
原创粉丝点击