螺旋数字矩阵(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();
        }

    }
}
相关推荐
monster000w3 小时前
大模型微调过程
人工智能·深度学习·算法·计算机视觉·信息与通信
小小晓.3 小时前
Pinely Round 4 (Div. 1 + Div. 2)
c++·算法
SHOJYS3 小时前
学习离线处理 [CSP-J 2022 山东] 部署
数据结构·c++·学习·算法
biter down3 小时前
c++:两种建堆方式的时间复杂度深度解析
算法
zhishidi3 小时前
推荐算法优缺点及通俗解读
算法·机器学习·推荐算法
WineMonk3 小时前
WPF 力导引算法实现图布局
算法·wpf
2401_837088504 小时前
双端队列(Deque)
算法
ada7_4 小时前
LeetCode(python)108.将有序数组转换为二叉搜索树
数据结构·python·算法·leetcode
奥特曼_ it4 小时前
【机器学习】python旅游数据分析可视化协同过滤算法推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
python·算法·机器学习·数据分析·django·毕业设计·旅游
仰泳的熊猫4 小时前
1084 Broken Keyboard
数据结构·c++·算法·pat考试