😏来了😏
🤣支持一下🤣
案例描述:
所谓魔方阵,古代又称为“纵横图”,就是指由自然数组成的方阵。什么是方阵呢?若一个
矩阵是由n个横列与n个纵行所构成,共有nxn个小方格,则称这个方阵是一个n阶方阵。方
阵中的每个元素都不相等,但每行和每列以及主副对角线上的各元素之和都相等。
案例要求编程实现一个5行5列的魔方阵。
案例实现:
1.案例设计
假定阵列的行列下标都从1开始,则魔方阵的生成方法如下:
在第一行中间置1,对从2开始的其余数依次按下列规则存放:
(1)假设当前数的下标为(x,y),则下一个数的放置位置为当前位置的右上方,即坐标为
(x-1,y+1)的位置;
(2)如果当前数在第一行,则将下一个数放在最后一行的下一列上;
(3)如果当前数在最后一列上,则将下一个数放在上一行的第一列上;
(4)如果下一个数的位置已经被占用,则下一个数直接放在当前位置的正下方,即放在下一
行同一列上。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int x,y;
x=1,y=3;//从中间位置开始
int arr[6][6]= {0}; //定一个数组存储魔方方阵
for(i=1; i<=25; i++) //魔方阵有25个数
{
arr[x][y]=i;//把i存储数组中
if(x==1&&y==5)
{
x++;
continue;//结束本次循环
}
if(x==1)//如果在第一行下一个数在最后一行
x=5;
else//将下一个数放在上一行
x--;
if(y==5)//如果在最后一列下一个数在第一列
y=1;
else//否则下一个数放在下一列
y++;
if(arr[x][y]!=0)//如果位置上有数字 行加2 列减1
{
x+=2;
y-=1;
}
}
for(i=1; i<=5; i++)
{
for(j=1; j<=5; j++)
{
printf("%4d",arr[i][j]);
}
printf("\n");
}
return 0;
}
运行结果如下:
下期见