华为OD机考往年真题 - 数字螺旋矩阵
2026年在考真题2026年目前正在考的真题目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解文章目录2026年在考真题题目描述输入描述输出描述用例1用例2用例3Java题目描述疫情期间小明隔离在家百无聊赖在纸上写数字玩。他发明了一种写法给出数字个数n和行数m0 n ≤ 9990 m ≤ 999从左上角的1开始按照顺时针螺旋向内写方式依次写出2,3…n最终形成一个m行矩阵。小明对这个矩阵有些要求每行数字的个数一样多列的数量尽可能少填充数字时优先填充外部数字不够时使用单个*号占位输入描述输入一行两个整数空格隔开依次表示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行只有一列数字不够用*号填充用例3输入120 7输出1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 19 45 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 63 20 44 83 114 115 116 117 118 119 120 * * * * * * 99 64 21 43 82 113 112 111 110 109 108 107 106 105 104 103 102 101 100 65 22 42 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 23 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24Javaimportjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);intnscanner.nextInt();// 读取要填充的数字个数nintmscanner.nextInt();// 读取矩阵的行数mscanner.close();// 输入完毕后关闭scannerintcols(int)Math.ceil(n/(double)m);// 计算矩阵的列数int[][]matrixnewint[m][cols];// 创建一个整型矩阵默认初始化为0intnum1;// 用于填充的数字从1开始inttop0,bottomm-1,left0,rightcols-1;while(numn){for(intileft;irightnumn;i){// 从左到右填充上边界matrix[top][i]num;}top;// 上边界下移for(intitop;ibottomnumn;i){// 从上到下填充右边界matrix[i][right]num;}right--;// 右边界左移for(intiright;ileftnumn;i--){// 从右到左填充下边界matrix[bottom][i]num;}bottom--;// 下边界上移for(intibottom;itopnumn;i--){// 从下到上填充左边界matrix[i][left]num;}left;// 左边界右移}for(inti0;im;i){// 遍历矩阵的每一行for(intj0;jcols;j){// 遍历矩阵的每一列if(matrix[i][j]0){// 如果当前位置是0则输出*System.out.print(*);}else{// 否则输出当前位置的数字System.out.print(matrix[i][j]);}if(jcols-1){// 在同一行的数字之间打印空格System.out.print( );}}System.out.println();// 每打印完一行后换行}}}文章目录2026年在考真题题目描述输入描述输出描述用例1用例2用例3Java