描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
例如,当输入5时,应该输出的三角形为:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
输入描述:
输入正整数N(N不大于100)
输出描述:
输出一个N行的蛇形矩阵。
示例1
输入:
4
输出:
1 3 6 10 2 5 9 4 8 7
解题思路:
通过观察可知,行数和列数都等于输入的正整数n,且每次的数字填充都是从各个副对角线开始,而每条副对角线上元素的行号与列号相加是相等的,比如第二根副对角线的元素2和元素3,行号+列号都会等于1,再比如第四根副对角线上的元素7,8,9,10,其行号+列号都会等于3(二维数组下标从0开始计算)。并且,同一根副对角线上的元素是按照行号递减,列号递增的规律进行填充的,了解到这里,就可以写代码了,以下为代码实现:
#include <stdio.h>
#define N 100
int main()
{
int n,arr[N][N],i,j,m,cnt=1;
scanf("%d",&n);
for(m=0;m<n;m++)
{
for(i=n-1;i>=0;i--) //行号从大到小递减
{
for(j=0;j<n;j++) //列号从小到大递增
{
if(i+j==m) //需要满足(行号i+列号j)==m,才能填入数字cnt
{
arr[i][j]=cnt++;
}
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}