螺旋数字矩阵(C卷)

分值: 100分

题目描述

疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:

给出数字个数n行数m (0 < n <= 999,0 < m <= 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵。

小明对这个矩阵有些要求:

  1. 每行数字的个数一样多
  2. 列的数量尽可能少
  3. 填充数字时优先填充外部
  4. 数字不够时,使用单个*号占位

输入描述

两个整数,空格隔开,依次表示n、m

输出描述

符合要求的唯一矩阵

示例1

输入:

9 4

输出:

1 2 3

* * 4

9 * 5

8 7 6

说明:

9个数字写成4行,最少需要3列
示例2

输入:

3 5

输出:

1

2

3

*

*

说明:

3个数字写5行,只有一列,数字不够用*号填充

代码思路

java 复制代码
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();//多少个数字
        int m=in.nextInt();//行的个数
        int k=n/m;//列的个数
        if(n%m!=0){
            k++;
        }
        rotate(n,m,k);
    }

    public static void rotate(int n,int m,int k){
        int[][] nums=new int[m][k];

        int x=1;
        int i=0,j=0;
        int dir=1;//1向左,2下,3右,4上
        while (x<=n){
            nums[i][j]=x++;
            if(dir==1){
                if(j+1<k&&nums[i][j+1]==0){
                    j++;
                }else{
                    dir=2;
                    i++;
                }
            }else if(dir==2){//下
                if(i+1<m&&nums[i+1][j]==0){
                    i++;
                }else{
                    dir=3;
                    j--;
                }
            } else if (dir==3) {//you
                if(j-1>=0&&nums[i][j-1]==0){
                    j--;
                }else{
                    dir=4;
                    i--;
                }
            }else{
                if(i-1>=0&&nums[i-1][j]==0){
                    i--;
                }else{
                    dir=1;
                    j++;
                }
            }
        }
        for(int a=0;a<m;a++){
            for(int b=0;b<k;b++){
                if(nums[a][b]==0){
                    System.out.print("* ");
                }else{
                    System.out.print(nums[a][b]+" ");
                }
            }
            System.out.println();
        }

    }
}
相关推荐
会员源码网6 小时前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
木心月转码ing6 小时前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
HelloReader7 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
颜酱10 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
qianpeng89711 小时前
水声匹配场定位原理及实验
算法
董董灿是个攻城狮1 天前
AI视觉连载8:传统 CV 之边缘检测
算法
RuoZoe1 天前
重塑WPF辉煌?基于DirectX 12的现代.NET UI框架Jalium
c语言
AI软著研究员1 天前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱1 天前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法