版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36669549/article/details/85008029
打印蛇形方阵,将自然数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");
}
结果: