2021-02-25
作者:互联网
n阶魔阵问题(C语言设计)
问题分析
若要使一个方阵的主、副对角线数值之和均相等,可以通过依次将自然数填入方阵中的方法。共填 n 轮,每轮填 n 次。第一轮的第一次,将 1 填入方阵的中间一行的最后一列位置。设前一次填入的位置是 aij;每轮中第 2 至第 n 次将数填入 ai+1,j+1,
若遇到下列两种情况之一,则填写位置按以下规则: 1.aij 是最后一列(即 j=n)位置,则将下一个数填入 ai+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