【问题描述】
将1,2,...,n*n个自然数,按蛇形方式存放在二维数组A[n][n]中。"蛇型"方式,即是按"副对角线"平行的各对角线,从左下到右上,再从右上到左下,存放n2个整数。例如:
1 3 4 2 5 8 6 7 9
【输入形式】
输入数组的阶数n。
【输出形式】
打印数据元素按蛇形排列的数组,整数打印的域宽为4。
【样例输入】
3
【样例输出】
1 3 4 2 5 8 6 7 9
通过画斜行即可发显规律
题解:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n, i, j;
scanf("%d", &n);
int a[100][100];//二维数组大小自定
int k = 1;
//输入上三角(后n-1个斜行)
for (i = 1; i <= n; i++)//根据斜行的规律写算法
for (j = 1; j <= i; j++)
{
if (i % 2 == 0)//判断是奇数斜行还是偶数斜行(将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)//判断是奇数斜行还是偶数斜行(将0该为一可改变蛇形数组走向)
a[n + 1 - j][i - n + j] = k;
else
a[i - n + j][n + 1 - j] = k;
k++;
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%-4d", a[i][j]);
printf("\n");
}
return 0;
}