1. 程式人生 > >陣列8——二維陣列6——列印蛇形方陣

陣列8——二維陣列6——列印蛇形方陣

列印蛇形方陣,將自然數1,2,··· ,N的平方按照蛇形方式依次存入N×N矩陣中。例如,N=5時的蛇形方陣

如圖所示。

【分析】

這是南京航空航天大學的考研試題。從a11開始到ann為止,依次填入自然數,交替對每一斜行從左上元素到右下元素或者從右下元素到左上元素填數。通過觀察,發現蛇形矩陣有以下特點:對於每一斜行的元素來說:

(1)對於奇數的斜行來說,下一個數的行號比上一個數的行號增1,列號減1。

(2)對於偶數的斜行來說,下一個數的行號比上一個數的行號減1,列號增1。

(3)對於前n個斜行來說,奇數斜行的元素從矩陣的第1行開始計數,偶數斜行的元素開始從矩陣的第1列開始計數。

(4)對於大於n的斜行來說,奇數斜行的元素從矩陣的第n列開始計數,偶數斜行的元素從矩陣的第n行開始計數。
main.cpp

#include<stdio.h>
#define N 20
#include <iostream>

using namespace std;
void main()
{
	int i, j, a[N][N], n, k;
	printf("請輸入矩陣的階n= ");
	scanf("%d", &n);
	k = 1;
	/*輸出上三角(前n個斜行)*/
	for (i = 1; i <= n; i++)
		for (j = 1; j <= i; j++)
		{
			if (i % 2 == 0)
				a[i + 1 - j][j] = k;
			else
				a[j][i + 1 - j] = k;
			k++;
		}
	/*輸出下三角(後n-1個斜行)*/
	for (i = n + 1; i < 2 * n; i++)
		for (j = 1; j <= 2 * n - i; j++)
		{
			if (i % 2 == 0)
				a[n + 1 - j][i - n + j] = k;
			else
				a[i - n + j][n + 1 - j] = k;
			k++;
		}
	printf("********蛇形方陣********\n");
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
			printf("%4d", a[i][j]);
		printf("\n");

	}

	system("pause");
}

結果: