天天看點

#c N宮格-橫豎斜的和相等

#c N宮格-橫豎斜的和相等

要求

一個n階n×n的矩陣,由數字1,2,⋯,n×n 構成,且滿足每一行、每一列、兩條對角線的數的和都相等。例如以下是一個3階的。

816

357

492

它滿足:

每一行的和都是15:8+1+6=15、3+5+7=15、4+9+2=15

每一列的和都是15: 8+3+4=15、1+5+9=15、6+7+2=15

兩條對角線的和也是15:8+5+2=15、4+9+2=15。

話不多說直接上代碼!!!

#include<stdio.h>
int main()
{
	int n;
	int k[40][40] = { 0 }; // 幻方的矩陣
	scanf("%d", &n);
	int b = n / 2 + 1, a = 1, c, d;
	for (int i = 1; i <= n * n; i++) {
		if (i == 1) {
			k[a][b] = 1;
			continue;
		}
		c = a, d = b,a--, b++;
		if (a < 1)a = n;
		if (b > n)b = 1;
		if (k[a][b] == 0)k[a][b] = i;
		else {
			a = c, b = d;
			a++;
			k[a][b] = i;
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			printf("%d", k[i][j]);
			printf("%c", j == n ? '\n' : ' ');
		}
	}
	return 0;
}

           

分析思路

1.首行中間位置填入1。

2.設前一次在x行y列處填入a。如果x-1行、y+1列(即右上一格)還沒填入數字,則在該位置填入a+1。否則,在x+1行、y列(即下方一格)位置填入a+1。注意,如果x-1超出上邊界,則變成最後一行,即實作循環減1。對y+1操作同理。

3.重複步驟2,直到填入n×n。

流程圖如下

#c N宮格-橫豎斜的和相等

ps:小白一隻如有不對請指正!謝謝!

繼續閱讀