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

    }
}
相关推荐
爱尔兰极光2 小时前
LeetCode 热题 100--字母异位词分组
算法·leetcode·职场和发展
梵刹古音2 小时前
【C语言】 数组基础与地址运算
c语言·开发语言·算法
im_AMBER2 小时前
Leetcode 112 两数相加 II
笔记·学习·算法·leetcode
long3162 小时前
KMP模式搜索算法
数据库·算法
激动的兔子2 小时前
Arcgis二次开发--评价单元综合限制级别判断矩阵工具
线性代数·arcgis·矩阵
_OP_CHEN2 小时前
【算法基础篇】(五十三)隔板法指南:从 “分球入盒” 到不定方程,组合计数的万能解题模板
算法·蓝桥杯·c/c++·组合数学·隔板法·acm/icpc
近津薪荼3 小时前
优选算法——滑动窗口3(子数组)
c++·学习·算法
遨游xyz3 小时前
数据结构-栈
java·数据结构·算法
ghie90903 小时前
基于动态规划算法的混合动力汽车能量管理建模与计算
算法·汽车·动态规划
蓝海星梦3 小时前
GRPO 算法演进——裁剪机制篇
论文阅读·人工智能·深度学习·算法·自然语言处理·强化学习