正文
51nod 2486 小b和矩阵
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
小b有一个m行n列的矩阵。
她会从(1,1)开始,顺时针螺旋访问该矩阵,每个元素恰好被访问一次。
请你按小b的访问顺序输出每个元素。
收起
输入
第一行输入两个数m和n,其中0<m,n≤500;
之后m行,每行n个数以空格隔开,表示这个矩阵。
之后m行,每行n个数以空格隔开,表示这个矩阵。
输出
输出一行共m*n个数,表示螺旋输出的结果
输入样例
3 4
1 2 3 4
5 6 7 8
9 10 11 12
1 2 3 4
5 6 7 8
9 10 11 12
输出样例
1 2 3 4 8 12 11 10 9 5 6 7
注意判断即可。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int mp[][];
int main() {
int n,m,flag = ;
scanf("%d%d",&n,&m);
for(int i = ;i < n;i ++) {
for(int j = ;j < m;j ++) {
scanf("%d",&mp[i][j]);
}
}
for(int i = ;i * < n && i * < m;i ++) {
for(int j = i;j < m - i;j ++) {
if(flag) putchar(' ');
else flag ++;
printf("%d",mp[i][j]);
}
for(int j = i + ;j < n - i;j ++) {
printf(" %d",mp[j][m - i - ]);
}
if(n - i - > i)
for(int j = m - i - ;j >= i;j --) {
printf(" %d",mp[n - i - ][j]);
}
if(i < m - i - )
for(int j = n - i - ;j > i;j --) {
printf(" %d",mp[j][i]);
}
}
}
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio> using namespace std;
int mp[][];
int main() {
int n,m,flag = ;
scanf("%d%d",&n,&m);
for(int i = ;i < n;i ++) {
for(int j = ;j < m;j ++) {
scanf("%d",&mp[i][j]);
}
}
for(int i = ;i * < n && i * < m;i ++) {
for(int j = i;j < m - i;j ++) {
if(flag) putchar(' ');
else flag ++;
printf("%d",mp[i][j]);
}
for(int j = i + ;j < n - i;j ++) {
printf(" %d",mp[j][m - i - ]);
}
if(n - i - > i)
for(int j = m - i - ;j >= i;j --) {
printf(" %d",mp[n - i - ][j]);
}
if(i < m - i - )
for(int j = n - i - ;j > i;j --) {
printf(" %d",mp[j][i]);
}
}
}