魔方阵中奇数魔方阵的实现

#include<stdio.h>
//奇数魔方方阵
//1位于N阶行的中间 
//下一个数位于上一行下一列 
// 当出现溢出时,注意回逆即可
//当所求位置已经有数字时,下一个数位于下一行 
int main()
{
	int N;
	printf("请输入N阶魔方,0-100之间的奇数:");
	scanf("%d",&N);
	int i=0,j=0;
	int row=0,col=0;
	int prerow=0,precol=0;
	int arr[100][100]={0};
	//找到1的位置 
		col=N/2;
		arr[row][col]=1;
	if(N%2!=0&&(N>=3&&N<=100))//对所输入的进行判断 
	{
		for(i=2;i<=N*N;i++)
		{
				row--;
				col++;
				//溢出时的判断条件 
				if(row<0)
					row=N-1;
				if(col>=N)
					col=0;
				//当所求位置已经有数字时
				if(arr[row][col]!=0)
				{
					row=prerow+1;
					col=precol;
				}
					
				arr[row][col]=i;
				prerow=row;
				precol=col;
		} 
			//打印
		for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
			{
				 printf("%4d",arr[i][j]);
			}
			printf("\n");
		}	
	}
	return 0;
}

魔方阵的介绍

魔方方阵有,“奇魔方阵”、“偶魔方阵”、“单偶魔方阵”。

魔方阵的规律

三阶魔方方阵的例图
816
357
492

我们会发现一个本质:其实这就是对依次递增的数字进行找位置,找到它所在的位置并进行输出。然后通过二维数组进行打印出来。

发现的规律:

一.1位于N阶行的中间 
二.下一个数位于上一行下一列 如:6就是5的上一行下一列
三.当出现溢出时,注意回逆即可。这里面对这这个回逆的理解,我认为就和一个圈起来的纸卷一         样,我们可以想象一下如果这样类比的话,2不就是在6的同列上一行。
四.当所求位置已经有数字时,下一个数位于下一行 。

代码内容的介绍

//当所求位置已经有数字时
				if(arr[row][col]!=0)
				{
					row=prerow+1;
					col=precol;
				}
					
				arr[row][col]=i;
				prerow=row;
				precol=col;
		} 

 当所占位置已经有数字时,要注意一点,它的下一行位置是相对于前一个位置的移动,所以此时一定要对前一个数的位置进行标记。

总结

看已知的图表时不要慌张,找到它们之间的规律并发现之间的规律,如杨辉三角,斐波拉契等问题,要慢慢理清思路。最后欢迎大佬在评论区对其余两种“魔方阵”进行解析。

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值