文章

1

粉丝

228

获赞

0

访问

11.8k

头像
题目提示
P1216 福州大学2018年机试题
发布于2021年1月22日 16:14
阅读数 11.8k

这里不好发图,我就用文字描述

可将结果分为几圈。例如:5可以分成3圈(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)(17 18 19 20 21 22 23 24)(25)

每一圈执行的操作是:下->右->上->左

注意! 最后输出的时候用“%-3d ” ,作占位符,最后还有个空格一个都不能错,不然不通过

这里就提供思路,本人已实现,代码拙劣就不贴了,有新思路的同学也欢迎与我交流cheeky

登录查看完整内容


登录后发布评论

2 条评论
928上岸梦校!
2023年8月9日 13:09

差不多代码是这样

#include <bits/stdc++.h>

using namespace std;

void generateSpiralMatrix(int n)
{
    vector<vector<int>> matrix(n, vector<int>(n, 0));

    int num = 1;
    int rowStart = 0, rowEnd = n - 1, colStart = 0, colEnd = n - 1;

    while (rowStart <= rowEnd && colStart <= colEnd)
    {
        // 向下填充
        for (int i = rowStart; i <= rowEnd; i++)
        {
            matrix[i][colStart] = num++;
        }
        colStart++;

        // 向右填充
        for (int i = colStart; i <= colEnd; i++)
        {
            matrix[rowEnd][i] = num++;
        }
        rowEnd--;

        // 向上填充
        if (colStart <= colEnd)
        {
            for (int i = rowEnd; i >= rowStart; i--)
            {
                matrix[i][colEnd] = num++;
            }
            colEnd--;
        }

        // 向左填充
        if (rowStart <= rowEnd)
        {
            for (int i = colEnd; i >= colStart; i--)
            {
                matrix[rowStart][i] = num++;
            }
            rowStart++;
        }
    }

    // 输出生成的螺旋矩阵
    for (const auto &row : matrix)
    {
        for (int num : row)
        {
            cout << setw(3) << std::left << num << ' '; // 宽度为3,左对齐
        }
        cout << '\n';
    }
}

int main()
{
    int n;
    cin >> n;
    generateSpiralMatrix(n);
    return 0;
}

赞(0)
Keeshpku SVIP
2023年3月19日 16:11

不贴代码,没必要发题解

赞(0)