题解 | 蛇形矩阵

#include <iostream>
#include <vector>
using namespace std;

int sn(int n) {
    return (n * (n + 1)) / 2;  //等差为1的数列的前n项和
}
int main() {
    int n;
    cin >> n;
    vector<vector<int>> arr(n + 1, vector<int>(n + 1, 0));
    for (int i = 1; i <= n ;
            i++) { //每第n行第一列的数据为以前n-1行和n-1列构成的三角形的数据数量+1,数据数量即等差为1的数列前n项和(只数个数不看数据的值)
        int j = 1, k = sn(i - 1) + 1,
            l = i;  //观察规律,数据是以右斜上的方向递增,所以同时定义游标,以右斜上的方向来进行赋值
        while (l > 0 && j > 0) {
            arr[l--][j++] = k++;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n - i + 1; j++) {
            cout << arr[i][j];
            if (j != n) cout << ' ';
        }
        if (i != n) cout << endl;  //按照所规定的格式输出
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

11-13 12:02
门头沟学院 Java
我要娶个什么名:好骂,好骂 别学计算机就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务