题解 | #蛇形矩阵#
蛇形矩阵
http://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
考虑题目的时候,忽略了其“蛇形”特点,仅从横竖数组的关系入手。
不考虑,每行数组长度的差异(这一点很好考虑,总数N-行标i)。
数组特点:
1,3,6,10,15
2,5,9,14,(20)
4,8,13,(19),(26)
7,12,(18),(25),(33)
竖列的规律是:1,2,4,7...
相邻两个数值之间的差值递增,由分析可得:
a[0]=1, a[1]=2
公式:a[n]=2*a[n-1]-a[n-2]+1 (n>1)
横行的规律基于竖列,横行首元与竖列相关,横行初始差值是 行标+2
b[0] = a[n], b[1] = b[0] + i + 2
公式:b[m]=2*b[m-1]-b[m-2]+1 (m>1)
#include <stdio.h>
int main()
{
int N;
int i;
int j;
int start[101];
int nums[101];
memset(start, 0, 101*sizeof(int));
memset(nums, 0, 101*sizeof(int));
start[0] = 1; start[1] = 2;
while(-1 != scanf("%d",&N)) {
for(i=0;i<N;i++) {
if(i>1) start[i] = 2*start[i-1] - start[i-2] + 1;
nums[0] = start[i];
nums[1] = nums[0] + i + 2;
for(j=0;j<N-i;j++) {
if(j>1) nums[j] = 2*nums[j-1] - nums[j-2] + 1;
printf("%d ", nums[j]);
}
printf("\n");
}
}
return 0;
}