题解 | #蛇形矩阵#

蛇形矩阵

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;
}
全部评论

相关推荐

狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务