看的别人的解法,就是按照下右上左的顺序走圈,一直到m*n个数走完为止(while来判定)
这里要注意越界的数组的值也是0,所以while跳出后要将++i的值减回来;还有就是一开始设定的i\j的值一定要放到while的外面,否则每一轮while都重新走了
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int a[201][201];
//int b[21];
int main()
{
int m,n;
cin >> m >> n;
//memset(a,0,sizeof(a));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin >> a[i][j];
}
}
int s = m*n;
int i=-1,j=0; //这里的值一定要放在while的外面
while(s){
//判定有没有走完
//下
while(a[++i][j]!= -1 && i<m && s){
cout << a[i][j]<< " ";
a[i][j] = -1;
s--;
}
i--; //此时已经跳出while循环了,但是i已经加1了,所以要减回来
//右
while(a[i][++j]!= -1 && j<n && s){
cout << a[i][j]<< " ";
a[i][j] = -1;
s--;
}
j--;
//上
while(a[--i][j]!= -1 && i>=0 && s){
cout << a[i][j]<< " ";
a[i][j] = -1;
s--;
}
i++;
//左
// int t = a[2][4];
// cout << t << endl;
while(a[i][--j]!= -1 && j>=0 && s){
cout << a[i][j]<< " ";
a[i][j] = -1;
s--;
}
j++;
}
、
return 0;
}