#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n, m;//n个数字和m行
cin >> n >> m;
int col = (n + m - 1) / m;//列数为n/m向上取整
vector<vector<int>> arr(m, vector<int> (col, 0));
vector<int> dx = {0, 1, 0, -1};//右,下,左,上
vector<int> dy = {1, 0, -1, 0};
int r = 0;//横坐标
int c = 0;//纵坐标
int index = 0;//输入方向,初始为向右
int num = 1;//填数
while(num <= n){//填数
arr[r][c] = num;
if(num == n){
break;//数字填充完毕
}
int nr, nc;
nr = r + dx[index];
nc = c + dy[index];
if(nr < 0 || nr >= m || nc >= col || arr[nr][nc] != 0){
index = (index + 1) % 4;//越界或已经填充,改变方向
nr = r + dx[index];
nc = c + dy[index];
}
r = nr;
c = nc;
++num;
}
for(int i = 0; i < m; i++){
for(int j = 0; j < col; j++){
if(arr[i][j]){//为数字
cout << arr[i][j] << " ";
}
else{
cout << '*' << " ";//0 则输出*
}
}
cout << endl;
}
}
螺旋数字矩阵(C++)
于 2024-05-17 21:03:26 首次发布