题目是将数据大小递增后成环型,所以可以由外至内以一环为一次循环,来搭建代码主体,因为矩阵可能是一长方形,不容易通过环的个数判断结束,所以用存储的数据大小是否到达n*m来判断;
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int n, m, t, a[120][120] = {0}, ans = 1;
void sc(){
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << a[i][j] <<' ';
}cout << endl;
}
}
int main() {
cin >> n >> m;
t = ceil(1.0 * min(n, m) / 2);
for(int i = 0; i < t; i++){
for(int j = i ; j <= m - i - 1; j++){
a[i][j] = ans++;
if (ans - 1>= n * m){
sc();
return 0;
}
}//上
for(int j = 1 + i; j <= n - i - 1; j++ ){
a[j][m - i - 1] = ans++;
if (ans - 1>= n * m){
sc();
return 0;
}
}//右
for(int j = m - i - 1 - 1; j >= i; j--){
a[n - i - 1][j] = ans++;
if (ans - 1>= n * m){
sc();
return 0;
}
}//下
for(int j = n - i - 1 - 1; j > i; j--){
a[j][i]= ans++;
if (ans - 1>= n * m){
sc();
return 0;
}
}//左
}
return 0;
}