您的位置:首页 > 其它

输入一个奇数n,打印出一个n*n的矩阵,每个数字是从1到n*n的整数,要使每一行,每一列的数字之和都相等

2017-03-31 22:37 609 查看
#include<stdio.h>

int a[1000][1000];

int main()

{

    int n,i,j;

    scanf("%d",&n);

    a[0][n/2]=1;

    for(i=0;i>n;i++){

        for(j=0;j<n;j++){

            a[i][j]=0;

        }

    }

    int h,l;

    h=0;

    l=n/2;

    for(i=2;i<=n*n;i++){

        if((h-1+n)%n>=0&&(l+1+n)%n>=0&&a[(h-1+n)%n][(l+1+n)%n]==0){

            a[(h-1+n)%n][(l+1+n)%n]=i;

            h=(h-1+n)%n;

            l=(l+1+n)%n;

        }

        else if((h+1+n)%n>=0&&a[(h+1+n)%n][l]==0){

                h=(h+1+n)%n;

                a[h][l]=i;

        }

        else if((h+1+n)%n>=0&&(l+1+n)%n>=0&&a[(h+1+n)%n][(l+1+n)%n]==0)

        {

            h=(h-1+n)%n;

            l=(l-1+n)%n;

            a[h][l]=i;

        }

    }

    for(i=0;i<n;i++){

        for(j=0;j<n;j++){

            printf("%d ",a[i][j]);

        }

        printf("\n");

    }

    return 0;
}

要考虑三个方向,并且要按先后考虑

1:当前位置的斜上方

2:(若前一方向不行)当前方向的正下方

3:(若前一方向不行)当前方向的左上方

要注意的是虽然矩阵是n*n的,但是想的时候要把矩阵扩展,这就是(h-1+n)%n之类的原因
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐