其他分享
首页 > 其他分享> > 2021-02-25

2021-02-25

作者:互联网

n阶魔阵问题(C语言设计)
问题分析

若要使一个方阵的主、副对角线数值之和均相等,可以通过依次将自然数填入方阵中的方法。共填 n 轮,每轮填 n 次。第一轮的第一次,将 1 填入方阵的中间一行的最后一列位置。设前一次填入的位置是 aij;每轮中第 2 至第 n 次将数填入 ai+1,j+1,

若遇到下列两种情况之一,则填写位置按以下规则: 1.aij 是最后一列(即 j=n)位置,则将下一个数填入 ai+1,1;

  1. aij 是最后一行(即 i=n)位置,则将下一个数填入 a1,j+1。每新一轮的第一次填入 ai,j-1。

程序中关键模块的描述:

1.生成一个每个元素都为0的n 阶矩阵;

2.先将最中间行的最后一列填入1;

3.从 2 开始,第一轮:从2到n 按照元素填放顺序依次填入矩阵中,然后从n+1 到 2n继续填入,直至最后填入第 n2 个元素;

4.求出各行,列,以及主副对角线元素之和并输出;

5.输出目标矩阵。

具体代码

#include<stdio.h>

int main()

{

int n;

scanf("%d",&n);

int arr[n+5][n+5];

int sum = 1,i = n/2+1,j = n,a = 0;

for(int num = 1;num <= n;num++)

{

    int ans = 0;

    while(ans != n)

    {

        if(j == n+1) j = 1;

        if(i == n+1) i = 1;

        ans++;

        arr[i][j] = sum;

        sum++;

        if(ans != n)

        {

            i++;

            j++;

        }

    }

    j--;

}



for(int a = 1;a <= n;a++)

{

    for(int b = 1;b <= n;b++)

    {

        printf("%d ",arr[a][b]);

    }

    printf("\n");

}

}

标签:02,25,填入,int,位置,ai,2021,aij,方阵
来源: https://blog.csdn.net/qq_48751603/article/details/114059588