##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;
}
代码整体比较简单,就是注意每个行列循环之后的退行退列操作,防止循环出错。
还需要多加注意的是要防止数组越界。

1104

被折叠的 条评论
为什么被折叠?



