回型矩阵

 ##c及c++基础
 title:

链接:https://ac.nowcoder.com/acm/problem/22230
来源:牛客网

 给你一个整数n,按要求输出n∗n的回型矩阵
 输入描述:
 输入一行,包含一个整数n
 1<=n<=19
 输出描述:
 输出n行,每行包含n个正整数.
 示例1
 输入
 4
 输出
 1 2 3 4
 12 13 14 5
 11 16 15 6
 10 9 8 7
 
 题目分析:由于本题的n最多只有19,即最多输出19*19的数字回型矩阵;思路比较简单,二维矩阵中,
 一行赋值过去直到遇到已赋值位置或者超出n,然后一列赋值直到遇到已赋值位置或者超出n;
 然后倒着一行赋值回去,倒着一列赋值回去,循环操作即可。
#include<bits/stdc++.h>
using namespace std;
int p[21][21];
int main()
{
    int n;
    cin >> n;
    for(int i=0;i<21;i++)
        for(int j=0;j<21;j++) p[i][j]=0;
    int i=1,j=1,x=0;
    while(x<n*n)
    {
        while(j<=n&&p[i][j]==0)
        {
            p[i][j++]=++x;
        }
        i++;j--;
        while(i<=n&&p[i][j]==0)
        {
            p[i++][j]=++x;
        }
        i--;j--;
        while(j>=1&&p[i][j]==0)
        {
            p[i][j--]=++x;
        }
        j++;i--;
        while(i>=1&&p[i][j]==0)
        {
            p[i--][j]=++x;
        }
        i++;j++;
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
            cout << p[i][j] << " ";
        cout << endl;
    }
    return 0;
}
 代码整体比较简单,就是注意每个行列循环之后的退行退列操作,防止循环出错。
 还需要多加注意的是要防止数组越界。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值