奇数魔方阵
2023-12-18 22:24:45
魔方阵的生成方法为第0行中间位置为1
2开始的其余n*n-1个数,依次按以下规则存放
1.下一个元素存放在当前元素的上一行、下一列
2.如果上一行下一列已有元素,则下一个元素存放的位置为当前列的下一行
3.在找上一行、下一行或下一列的时候,把矩阵看成回绕
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[100][100] = { 0 };
int row = 0, col = 0;
int i = 0;
int prerow = 0, precol = 0;
int n = 0;
while (1)
{
printf("输入这是一个几阶的魔方阵:");
scanf("%d", &n);
//奇魔方阵3~100之间
if (n % 2 == 0 && n < 3 && n>100)
{
break;
}
//1在第0行中间的位置
col = n/ 2;
a[row][col] = 1;
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 (int j = 0; j < n; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
return 0;
}
?输出结果:
文章来源:https://blog.csdn.net/2301_78189441/article/details/135070692
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!