c语言魔方阵(奇数魔法阵)

   n*n 魔方阵  (n=2k+1)                                                     

   一、什么是魔方阵?

魔方矩阵,又称幻方,是具有相同的行数和列数,并在每行每列对角线上的和都相等的矩阵。

  二、魔法阵的实行方法

1、奇数阶魔方阵(n=2k+1)

1)首先确定1的位置:位于第一行n+1/2(奇数行最中间一列)

2)下一个数放到上一个数的右上角(即上一行下一列),若无上一行则放到第n行(因为是左上角-->

相应的列加1),若无下一列则放到第一列(因为是左上角-->相应的行减1)

3)若新位置已经放了数,则将其放入上一个数的正下方(即下一行的同一列)
4)重复(2)和(3)。

代码实现

#include<stdio.h>
#pragma warning(disable : 4996)
int main()
{
	int i,i1,j1;
	int j;
	int n,p;
	int arr[100][100];
	printf("魔法矩阵阶数");
	scanf("%d",&n);
	for ( i = 1; i <=n; i++)
	{
	    for ( j = 1; j <=n; j++)
		{
			printf("%2d", arr[i][j] = 0);//二维数组进行初始化
		}
		printf("\n");
	}
	printf("\n");
	i = 1;//确定数字1的位置;
	j = (n + 1) / 2;//确定数字1的位置,位于第一行第奇数列中间位置;
	arr[1][j] = 1;
	for ( p =2; p<=n*n; p++)//从数字2开始到(n*n)进行魔法方阵规律排列;
	{
		i1 = i;//新定义:行;
		j1 = j;//新定义:列;
		i--;//实则下一个数放到上一个数的右上角(即上一行下一列)则行减1;
		j++;//列加1(即上一行下一列);
		if (i<1)//若无上一行则放到最后一行;
		{
			i = n;
		}
		if (j>n)//若无下一列则放到第一列;
		{
			j = 1;
		}
		if (arr[i][j])//若新的位置上已经放了数,则将其放入上一个数的正下方
		{
			i = i1 + 1;//行加1(即下一行的同一列);
			j = j1;//列不变(即下一行的同一列);
		}
		arr[i][j]=p;

	}
	for (i = 1; i <=n; i++)
	{
		for (j = 1; j <=n; j++)
		{
			printf("%5d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;

// }
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值