蓝桥杯B组 蛇形数

蓝桥杯B组蛇形数

#include <bits/stdc++.h>
using namespace std;

int a[100][100];

int main()
{
    a[1][1] = 1;
    for (int i = 2; i <= 40 ; i ++) //操作的列数
    {
        for (int j = 1, y = i; j <= i; j++, y --) //j为操作次数,y记录初始列号,容易看出第一列操作一次第二列操作两次
        {
            if (i & 1) //判断奇偶列
                // 奇数列判断是否是第一行 若是第一行则等于前一列的值+1,若不是则对角线+1
                j == 1 ? a[y][j] = a[y - 1][j] + 1 : a[y][j] = a[y + 1][j - 1] + 1; 
                        //奇数列从下往上计算 有i列i行 每次向上走 行-1,列+1 所以是a[y + 1][j - 1] + 1
            else
                // 偶数列判断是否第一列  若是第一列则等于上一列的值+1,若不是则对角线+1
                j == 1 ? a[j][y] = a[j][y - 1] + 1 : a[j][y] = a[j - 1][y + 1] + 1;  
                        //偶数列从上往下计算 j正好为行 y为列, 每次向下走 行+1,列-1 所以是a[j - 1][j + 1] + 1;
        }
    }
    for (int i = 1; i <= 20; i ++)
    {
        for (int j = 1; j <= 20; j ++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    printf("%d", a[20][20]);
    return 0;
}

 

posted @ 2020-10-18 12:49  。啊这  阅读(241)  评论(0)    收藏  举报