輸出"魔方陣" 所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。例如:


輸出"魔方陣"。所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。例如:

8   1   6
3   5   7
4   9   2

要求輸出1~\(n^2\)的自然數構成的魔方陣。

【答案解析】

| 17 | 24 |  1 |  8 | 15 |
--------------------------
| 23 |  5 |  7 | 14 | 16 |
--------------------------
|  4 |  6 | 13 | 20 | 22 |
--------------------------
| 10 | 12 | 19 | 21 |  3 |
--------------------------
| 11 | 18 | 25 |  2 |  9 |

仔細觀察上述矩陣,可以看到以下規律:

魔方陣的生成方法為:在第0行中間置1,對從2開始的其余\(n^2-1\)個數依次按下列規則存放:

  1. 將1放在第1行的中間一列。
  2. 從2開始直到n*n止,各數依次按此規律存放:每一個數存放的行比前一個數的行數減1,列數加1。
  3. 如果上一行的行數為1,則下一個數的行數為n(指最下一行)。
  4. 當上一個數的列數為n時,下一個數的列數應該為1。
  5. 如果按上面規律確定的位置有數,或者上一個數是第1行第n列時,則把下一個數放在上一個數的下面。

【代碼實現】

#include <stdio.h>
int main()
{
	int a[15][15], n, i, j, k;
	while (1)
	{
		printf("請輸入n(1~15):");
		scanf("%d", &n);
		if (n != 0 && n <= 15 && n % 2 != 0)
			break;
		else
		{
			printf("請輸入奇數\n");
		}
	}

	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
			a[i][j] = 0;
	}

	j = n / 2 + 1;
	a[1][j] = 1;
	i = 1;
	for (k = 2; k <= n*n; k++)
	{
		i -= 1;
		j += 1;

		if (i<1 && j>n)
		{
			i += 2;
			j -= 1;
		}
		else if (i<1)
		{
			i = n;
		}
		else if (j>n)
		{
			j = 1;
		}

		if (a[i][j] == 0)
		{
			a[i][j] = k;
		}
		else
		{
			i += 2;
			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;
}

【結果截屏】

輸出"魔方陣" 所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。例如:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM