魔方阵(C语言)

一、魔方阵规律;

8    1    6

3    5    7

4    9    2

魔方阵中各数的排列规律如下:

(1)将1放在第1行中间一列。

(2)从2开始直到n×n止,各数依次按此规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列)。

(3)如果上一数的行数为1,则下一个数的行数为n(指最下一行)。例如,1在第1行,则2应放在最下一行,列数同样加1。

(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1。例如,2在第3行最后一列,则3应放在第2行第1列。

(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4应该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。

二、N-S流程图;

三、运行结果;

四、源代码;

# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>

int main()
{
	//初始化变量值;
	int a[15][15], p = 0, i, j, k, n;

	//获取输出几阶魔法阵;
	printf("请输入n的值:");
	//循环判断n为小于15的奇数;
	while (p == 0)
	{
		//获取用户输入数据;
		scanf("%d", &n);

		//判断;
		if (n % 2 != 0)
		{
			p = 1;
		}
	}

	//填充矩阵数据;
	for (i = 1; i <= n; i++)
	{
		//列;
		for (j = 1; j <= n; j++)
		{
			//填充;
			a[i][j] = 0;
		}
	}

	//赋值;
	j = n / 2 + 1;
	a[1][j] = 1;

	//实现魔方阵;
	for (k = 2; k < n * n; k++)
	{
		//运算;
		i = i - 1;
		j = j + 1;

		//判断是否为第一行最后一列;
		if ((i < 1) && (j > n))
		{
			i = i + 2;
			j = j - 1;
		}
		else
		{
			//是否为第一行;
			if (i < 1)
			{
				i = n;
			}

			//是否为最后一列;
			if (j > n)
			{
				j = 1;
			}
		}

		//判断数据存储位置是否为空;
		if (a[i][j] == 0)
		{
			//填充;
			a[i][j] = k;
		}
		else
		{
			i = i + 2;
			j = j - 1;
			a[i][j] = k;
		}
	}

	//输出魔方阵;
	for (i = 1; i <= n; i++)
	{
		//列;
		for (j = 1; j <= n; j++)
		{
			//输出;
			printf("%5d", a[i][j]);
		}

		//换行;
		printf("\n");
	}

	return 0;
}

相关推荐

  1. C语言:螺旋

    2024-05-03 00:12:05       29 阅读
  2. C语言每日一题—判断是否为魔方矩阵

    2024-05-03 00:12:05       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 00:12:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 00:12:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 00:12:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 00:12:05       18 阅读

热门阅读

  1. Linux内核深入学习 - 内核同步

    2024-05-03 00:12:05       12 阅读
  2. web响应式页面是啥要注意啥

    2024-05-03 00:12:05       11 阅读
  3. C# Solidworks二次开发:枚举应用实战(第十讲)

    2024-05-03 00:12:05       11 阅读
  4. vue 组件组件通信方法

    2024-05-03 00:12:05       14 阅读