题目
本题是谭浩强《C程序设计课后习题》题6.7。
题目:输出“魔方阵”–每一行,每一列和对角线之和均相等。
例:3阶魔方阵
8 1 6
3 5 7
4 9 2
求:1-n^2的自然数构成的魔方阵。
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj
一、解题思路
思路:
首先我们来了解一下魔方阵的生成方法:
1.先把第0行中间置为1.
2.下一个元素放在当前元素的上一行,下一列。
x=a[i-1][j+1]
3.如果上一行,下一列已有元素,则下一个元素存放在当前列的下一行。
x=a[i+1][j]
4.把矩阵看成是回绕的(像个球卷起来那样)
if i<0 i=最后一行
if j>size j=0
最后大家可以直接去看代码部分,基本上每一步我都标注了相关注释,程序易读性很高。
二、代码部分
1.引入库
代码如下(示例):
#include<stdio.h>
2.主函数部分
代码如下(示例):
void main()
{
int n;
printf("请输入一个3-100之间的奇数,用于做魔方阵的阶数:");
scanf("%d", &n);
int a[100][100] = { 0 };
int row, col;
int prerow, precol ;
row = 0;
col = n / 2;
a[row][col] = 1;
int i, j;
for (i = 2; i <= n * n; i++)
{
row--;
col++;
if (row < 0)
row = n - 1;
if (col >= n)
col = 0;
if (a[row][col] != 0)
{
row = prerow + 1;
col = precol;
}
a[row][col] = i;
prerow = row;
precol = col;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%-4d", a[i][j]);
printf("\n");
}
}
三、执行结果
输入:
请输入一个3-100之间的奇数,用于做魔方阵的阶数: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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)