2301_80372041 2023-12-31 22:37 采纳率: 100%
浏览 21
已结题

关于有关螺旋矩阵的问题!(语言-c++)

R7-2 螺旋矩阵
分数 13
作者 c++课程组
单位 湖州师范学院
所谓“螺旋矩阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:
输入在一行中给出一个正整数N(<10)。

输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占4位。

输入样例:
5
输出样例:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C (gcc)

  • 写回答

2条回答 默认 最新

  • 真相重于对错 2024-01-01 17:28
    关注
    
    #include<iostream>
    #include <iomanip>
    using namespace std;
    #define N 100
    int dir[][2]={{0,1},{1,0},{0,-1},{-1,0}};
    int matrix[N][N];
    int main()
    {
            int n;
            cin>>n;
            int nd=0;
            int k=1;
            int x=0;
            int y=0;
            int l=0,r=n-1,t=1,b=n-1;
            for (int i = 0; i < n * n; i++) {
                 matrix[x][y]=k++;
                 if(y+dir[nd][1]>r&&nd==0)
                 {
                            nd=(++nd)%4;
                            r--;
                 }
                 if (y + dir[nd][1] < l && nd == 2)
                 {
                         nd=(++nd)%4;
                         l++;
                 }
                 if (x + dir[nd][0] > b && nd == 1)
                 {
                         nd=(++nd)%4;
                         b--;
                 }
                 if(x+dir[nd][0]<t&&nd==3){
                    nd=(++nd)%4;
                    t++;
                 }
                 x+=dir[nd][0];
                 y+=dir[nd][1];
            }
            for(int i=0;i<n;i++){
                    for(int j=0;j<n;j++)
                            cout<< setw(4)<<matrix[i][j];
                    cout<<endl;
                    }
            
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 12月31日