时间限制:1秒
空间限制:32768K
给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素
输入描述:
输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。
输出描述:
请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,
3,”),每个矩阵输出完成后记得换行
输入例子1:
3 3
1 2 3
4 5 6
7 8 9
-1 -1
输出例子1:
1,2,3,6,9,8,7,4,5
# include <iostream>
# include <stdio.h>
using namespace std;
int main(){
int m,n;
while (scanf("%d%d",&m,&n) != EOF) {
if (m == -1) {
break;
}
int a[m][n];
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
scanf("%d",&a[i][j]);
}
}
//
int i=0,j=0;
int status = 3;//up:0;down:1;left:2;right:3
int u=0,d=0,l=0,r=0;//分别代表它们走的次数
int count=0;
while (count < m*n) {
if (status == 0) {//up
while (i >= r) {
count++;
if (count == m*n) {
printf("%d\n",a[i][j]);
break;
}
printf("%d,",a[i][j]);
i--;
}
i++;
status = 3;//turn right
u++;
j++;//从4变成5
}else if (status == 1){//down
while (i < m-l) {
count++;
if (count == m*n) {
printf("%d\n",a[i][j]);
break;
}
printf("%d,",a[i][j]);
i++;
}
i--;
status = 2;//turn left
d++;
j--;//从9变成8
}else if (status == 2){//left
while (j >= u) {
count++;
if (count == m*n) {
printf("%d\n",a[i][j]);
break;
}
printf("%d,",a[i][j]);
j--;
}
j++;
status = 0;//turn up
l++;
i--;//从7变成4
}else{//right
while (j < n-d) {
count++;
if (count == m*n) {
printf("%d\n",a[i][j]);
break;
}
printf("%d,",a[i][j]);
j++;
}
j--;
status = 1;//turn down
r++;
i++;//从3变成6
}
}
}
return 0;
}