凭空起惊雷 2023-10-19 21:19 采纳率: 76.2%
浏览 34
已结题

C++ 方阵填数省试题

在一个NN的方阵中,填入1,2,……NN个数,并要求构成如下的格式:

例如:

N=5

13 14 15 16 1

12 23 24 17 2

11 22 25 18 3

10 21 20 19 4

9 8 7 6 5

N=6

16 17 18 19 20 1

15 30 31 32 21 2

14 29 36 33 22 3

13 28 35 34 23 4

12 27 26 25 24 5

11 10 9 8 7 6

输入格式

每个测试文件只包含一组测试数据,每组输入一个N。

输出格式

输出构成的方阵。

输入输出样例

输入样例#1
5
输出样例#1
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
说明/提示

6


16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6

  • 写回答

2条回答 默认 最新

  • 想要AC的dly 2023-10-19 21:27
    关注
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int N;
        cin >> N;  // 从标准输入中读取N
    
        vector<vector<int>> matrix(N, vector<int>(N));
    
        int num = 1;
        int start_row = 0, end_row = N - 1, start_col = 0, end_col = N - 1;
    
        while (num <= N * N) {
            // 从上到下
            for (int i = start_row; i <= end_row; ++i) {
                matrix[i][end_col] = num;
                num++;
            }
            end_col--;
    
            // 从右到左
            for (int i = end_col; i >= start_col; --i) {
                matrix[end_row][i] = num;
                num++;
            }
            end_row--;
    
            // 从下到上
            for (int i = end_row; i >= start_row; --i) {
                matrix[i][start_col] = num;
                num++;
            }
            start_col++;
    
            // 从左到右
            for (int i = start_col; i <= end_col; ++i) {
                matrix[start_row][i] = num;
                num++;
            }
            start_row++;
        }
    
        // 输出生成的方阵
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                cout << matrix[i][j];
                if (j < N - 1) {
                    cout << " ";
                }
            }
            cout << endl;
        }
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 创建了问题 10月19日