赞
踩
小明是真的无聊
无语
如果很闲可以去献血
看什么看
我精神状态好得很呐
疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:
给出数字个数 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); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。