蛇形矩阵(牛客板子)

蛇形矩阵

简化做法

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

int a[1010][1010];

signed main(){
    int n; cin >> n;
    int cnt = 1, x = 1, y = 1;
    bool flag = false;
    while(cnt <= n * n){
        if(x <= n && y <= n) a[x][y] = cnt++;
        if(!flag) --x, ++y;
        else ++x, --y;
        if(!x) flag = true, x = 1;
        if(!y) flag = false, y = 1;
    }
       
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j){
            cout << a[i][j] << " ";
        }
        cout << endl;
    }

    
    return 0;
}

纯模拟

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

int a[1010][1010];

signed main(){
    int n; cin >> n;
    int cnt = 1;
    for(int k = 1; k <= n; ++k){
        if(k & 1){
            for(int i = k, j = 1; i >= 1;){
                a[i--][j++] = cnt++;
            }
        }else{
            for(int i = 1, j = k; j >= 1;){
                a[i++][j--] = cnt++;
            }
        }
    }
    for(int k = n - 1; k >= 1; --k){
        if(k & 1){
            for(int i = n, j = n - k + 1; j <= n;){
                a[i--][j++] = cnt++;
            }
        }else{
            for(int i = n - k + 1, j = n; i <= n;){
                a[i++][j--] = cnt++;
            }
        }
    }
    
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j){
            cout << a[i][j] << " ";
        }
        cout << endl;
    }

    
    return 0;
}
posted @ 2025-03-17 14:36  awei040519  阅读(32)  评论(0)    收藏  举报