TB椰程 TypeBuddy 打字搭子

蛇形方阵

洛谷·深入浅出 · 代码 · cpp · 难度 3/5 · 共 950 字

顺时针蛇形填充 n×n(每位占 3 列)

  • 洛谷
  • 练习

正文

// 原题:https://oj.yecheng.tv/p/1408
// 题意:n×n 方阵从左上角 1 开始顺时针螺旋填数,每个数占 3 列右对齐。
// 思路:用上/下/左/右四条边界,按 右→下→左→上 循环填,越界或已填则转向后收缩边界。
// 复杂度:O(n^2)。
// 易错点:顺时针方向顺序;每个数占 3 字符宽度用 setw(3);填完一圈收缩边界。
#include <iostream>
#include <iomanip>
using namespace std;
int a[12][12];
int main(){
    int n;
    cin >> n;
    int top = 0, bot = n - 1, left = 0, right = n - 1;
    int cur = 1;
    while(top <= bot && left <= right){
        for(int j = left; j <= right; j++) a[top][j] = cur++;
        top++;
        for(int i = top; i <= bot; i++) a[i][right] = cur++;
        right--;
        if(top <= bot){
            for(int j = right; j >= left; j--) a[bot][j] = cur++;
            bot--;
        }
        if(left <= right){
            for(int i = bot; i >= top; i--) a[i][left] = cur++;
            left++;
        }
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++) cout << setw(3) << a[i][j];
        cout << endl;
    }
    return 0;
}

洛谷·深入浅出的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK