时间限制: 1Sec 内存限制: 64MB 提交: 8820 解决: 5929
题目描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
算法简析
对每行进行分析,当N为5时,第一行数字个数为5,以后逐行递减,因此行号与每行个数的和固定为6,而每行数字间的增量为等差序列,第一个增量为行号+1。(这道题基本是通过观察写出来的,也没有啥特好用的算法,在线蹲一个大佬能简化一下代码)
程序实现
#include<stdio.h>
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
int num;//记录每行打印的数字
int add;//记录相邻数字之间的增量
int first[100];//记录行首数字
first[0]=1;
for(int i=1;i<=N;i++)
{
add=i+1;
num=first[0]+i-1;
int k=0;//first数组
for(int j=N+1-i;j>=1;j--)
{
printf("%d ",num);
first[k]=num;
num=num+add;
add++;
k++;
}
printf("\n");//每输出一行打印一个空格
}
}
return 0;
}