小明是真的无聊
无语
如果很闲可以去献血
看什么看
我精神状态好得很呐
疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:
给出数字个数 n (0 < n ≤ 999)和行数 m(0 < m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,…,n,最终形成一个 m 行矩阵。
小明对这个矩阵有些要求:
每行数字的个数一样多
列的数量尽可能少
填充数字时优先填充外部
数字不够时,使用单个 * 号占位
import java.util.Scanner;
import java.util.StringJoiner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int row = sc.nextInt();
int column = (int)Math.ceil(num*1.0/row);
int[][] matrix = new int[row][column];
int x = 0;
int y = 0;
int step = 1;
while(step <= num){
while(y < column && matrix[x][y] == 0 && step <= num){
matrix[x][y++] = step++;
}
x+=1;
y-=1;
while(x < row && matrix[x][y] == 0 && step <= num){
matrix[x++][y] = step++;
}
x-=1;
y-=1;
while(y >= 0 && matrix[x][y] == 0 && step <= num){
matrix[x][y--] = step++;
}
x-=1;
y+=1;
while(x >= 0 && matrix[x][y] == 0 && step <= num){
matrix[x--][y] = step++;
}
x+=1;
y+=1;
}
for(int i=0; i<row; i++){
StringJoiner sj = new StringJoiner(" ");
for(int j=0; j<column; j++){
if(matrix[i][j] == 0){
sj.add("*");
} else {
sj.add(matrix[i][j] + "");
}
}
System.out.println(sj);
}
}
}