top1编程
← 返回题目
题解

【入门】鲜花方阵

1 条题解

  • 0
    @ 2026-7-31 15:01:41

    解题思路

    题目要求输出一个 n×n 的花盆方阵,0 组成沙漏状图形,其他是 1。拿 n=5 来看:

    1 1 0 1 1
    1 0 1 0 1
    0 1 0 1 0
    1 0 1 0 1
    1 1 0 1 1
    

    规律:0 的位置。

    0 分布在从四个角向中心延伸的斜线上,再加中心点:

    • 第 0 行:中间 (0, n/2)
    • 第 1 行:中间偏左和偏右
    • …… 越往中间越向两边散开
    • 中心点也是 0

    思路:先全填 1,再把 0 的位置改掉。

    1. 初始化整个方阵为 1
    2. 用循环把四个方向的斜线位置设为 0:
      • 第 i 行,从左右两边的 n/2±i 位置填 0(上半部分)
      • 对称的下面也填 0
      • 中心点填 0
    3. 场宽 3 输出

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int a[10][10];
        int n;
        cin >> n;
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) a[i][j] = 1;
        }
    
        // 四个方向的斜线位置填 0
        for (int i = 0; i <= n / 2; i++) {
            a[i][n / 2 - i] = 0;
            a[i][n / 2 + i] = 0;
            a[n - 1 - i][n / 2 - i] = 0;
            a[n - 1 - i][n / 2 + i] = 0;
        }
        a[n / 2][n / 2] = 0;  // 中心
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << setw(3) << a[i][j];
            }
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),填充和输出
    • 空间复杂度:O(N²),二维数组
    • 1