题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
#include <stdio.h> //这里使用思路2 /* 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 0 1 2 3 4 1 3 6 10 15 arr[0][1]=arr[0][0]+2 arr[0][2]=arr[0][1]+3=arr[0][0]+2+3 arr[0][3]=arr[0][0]+2+3+4 delta=delta+n+1 //关于递增差数列的通项公式的规律 1,1+2,1+2+3,bn=自然数前n项和=级数=(a1+an)*n/2 b_n-b_(n-1)=an*n-a_(n-1)*(n-1)+a1/2;记an-a_(n-1)为delta,则b_n-b_(n-1)=delta*(n-1)+an+a1; 思路3:其实可以不占用空间,直接输出结果,按行输出便是1,1+2,1+2+3,1+2+3.。。直到1+2+。+n 下一行便是1+行数-1,行数+2 第一列的元素是1,1+1,1+1+2,1+1+2+3(斐波那契数列) */ int RawToRawFirst(int raw); void PrintRaw(int raw,int n) { printf("%d ",RawToRawFirst(raw)); int delta=2+raw;//初始差 for(int i=1;i<n-raw;i++) { printf("%d",RawToRawFirst(raw)+delta); delta=delta+(i+raw+1)+1; if(i==n-raw-1) { printf("\n"); break; } else printf(" "); } //return; } int RawToRawFirst(int raw) { if(raw==0) return 1; if(raw==1) return 2; else if(raw>1) return raw+RawToRawFirst(raw-1); return 0; } int main() { int n=5; scanf("%d",&n); for(int i=0;i<n;i++) { PrintRaw(i,n); } return 0; }