魔方矩陣

iamzxf發表於2014-11-10

    輸入一奇數,要求產生對應的魔方矩陣。

解題思路:魔方矩陣是指這樣的二維矩陣,矩陣的每一行、每一列,主對角線、副對角線上所有元素的和均相等。假設矩陣的維數是N*N,其中N為奇數,放置元素的步驟如下:

    首先將第一個元素放在第一行正中間的位置;其次,如果當前放置的元素是N的倍數,則下一個數放在當前位置的正下方,如果不是N的位置,放置在當前位置的右上角。

    放置元素時,將二維矩陣看成是左右相接,上下相接,可以通過對N取餘實現。參考程式碼如下:

#include <stdio.h>
#define N 5
//magic matrix
int main()
{
	int i,j;
	int num;
	int a[N][N];

	i=0;j=N/2; //initial position
	for(num=1;num<=N*N;num++)
	{
		a[i][j]=num;
		if(num%N)	//右上角
		{
			i=(i-1+N)%N;
			j=(j+1)%N;
		}
		else	//正下方
		{
			i=(i+1)%N;
		}
	}

	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
			printf("%3d",a[i][j]);
		putchar('\n');
	}

	return 0;
}





相關文章