`
vinkeychen
  • 浏览: 1951 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
社区版块
存档分类
最新评论

回旋矩阵

阅读更多

这是深圳某处的一个面试题,要求打印出如下格式:

 

  1. int i=5;  
  2. 1    2   3   4  5  
  3. 16 17 18 19 6  
  4. 15 24 25 20 7  
  5. 14 23 22 21 8  
  6. 13 12 11 10 9  
  7.   
  8. int i=6  
  9. 1    2    3   4  5   6  
  10. 20 21 22 23 24  7  
  11. 19 32 33 34 25  8  
  12. 18 31 36 35 26  9  
  13. 17 30 29 28 27 10  
  14. 16 15 14 13 12 11  


解决方案1:
  1. public class SnakePrint {  
  2.   
  3.     private int orient = 0, length = 0, x = 0, y = 0;  
  4.     // orients为顺时针90°旋转方向,前进步长为1  
  5.     private int[][] orients = { { 01 }, { 10 }, { 0, -1 }, { -10 } };  
  6.     private int[][] arrays;  
  7.   
  8.     public SnakePrint(int length) {  
  9.         this.length = length;  
  10.         arrays = new int[length][length];  
  11.     }  
  12.   
  13.     // 根据当前方向返回下一个前进方向  
  14.     private int[] nextOrient(int[] curOrient) {  
  15.         int nextX = x + curOrient[0], nextY = y + curOrient[1];  
  16.   
  17.         // 前进方向需要顺时针旋转90°了  
  18.         if (nextX < 0 || nextX >= length || nextY < 0 || nextY >= length  
  19.                 || arrays[nextX][nextY] != 0) {  
  20.             orient = ++orient % 4;  
  21.             return orients[orient];  
  22.         }  
  23.   
  24.         return curOrient; // 不需要掉头,返回原前进方向  
  25.     }  
  26.   
  27.     public void print() {  
  28.         int[] curOrient = orients[orient]; // 初始前进方向  
  29.         for (int i = 1; i <= length * length; i++) { // 依次填充数组  
  30.             arrays[x][y] = i;  
  31.             curOrient = nextOrient(curOrient);  
  32.             x += curOrient[0];  
  33.             y += curOrient[1];  
  34.         }  
  35.   
  36.         for (int i = 0; i < length; i++) {  
  37.             for (int j = 0; j < length; j++) {  
  38.                 System.out.printf("%4d", arrays[i][j]); // 按固定4个字符宽度的格式输出  
  39.             }  
  40.             System.out.println();  
  41.         }  
  42.     }  
  43.   
  44.     public static void main(String[] args) {  
  45.         SnakePrint snakePrint = new SnakePrint(6);  
  46.         snakePrint.print();  
  47.     }  
  48. }  

分享到:
评论

相关推荐

    回旋矩阵的C实现(希望给需要的人提供帮助)

    用C语言编写回旋矩阵,可以产生任意阶的回旋矩阵,包括矩阵,以及图形的表示,直观

    输出回旋矩阵(c语言)

    这是一个输出回旋矩阵的C语言程序,只要输入矩阵的大小然后按enter键就可以输出顺时针方向的回旋矩阵

    python实现回旋矩阵方式(旋转矩阵)

    今天小编就为大家分享一篇python实现回旋矩阵方式(旋转矩阵),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    求N阶回旋矩阵(C/C++)

    求N阶回旋矩阵,在给定阶数的二维数组外构建搜索边界,使用试探法求解

    C#中的回旋矩阵

    一个C#的算法,实现数字的回旋排列,从大到小,顺时针排列,核心算法适用于其他语言

    AdS中大量带电粒子的大规模颤振矩阵模型

    我们提出了一类新的N = 4 $$ \ ... 这些产生通常与通量的存在相关的动力学现象,例如模糊膜,内部回旋加速器运动和约束弦的出现。 我们还展示了如何通过在三个球体上进行三维超对称颤动量规理论的降维来获得这些模型。

    基于CCD的高炉风口回旋区三维温度场的检测技术 (2015年)

    CCD)摄像机可以获得高炉回旋区内累积的二维温度辐射图像,然后将高炉回旋区均分成若干小块,利用数学模型近似模拟回旋区内的辐射传热过程并建立矩阵方程,通过求解方程获得高炉回旋区内的三维温度场. 在模拟辐射...

    C# 回旋数 控制台程序

    输入输出的矩阵边长,即可按提示操作。主要实现数组与for循环配合使用的高级算法。

    nmf的matlab代码-rs-mnmf:基于射线空间的多通道非负矩阵分解

    在最流行的替代方案中,多通道NMF(MNMF)和基于受约束的空间协方差模型的进一步推导已成功地用于分离多麦克风回旋混合物。 这封信提出了通过考虑具有Ray-Space转换信号的混合模型来提出MNMF扩展,其中幅度数据成功...

    经典教材:统计计算(高慧璇)

    pdf影印清晰版 第一章 误差与数据处理 第二章 常用分布函数和分位数的计算 第三章 随机数的产生和检验 ...第五章 统计计算中常用的矩阵算法 第六章 多元线形回归的计算方法 第七章 非线形回归分析及其算法

    非对称量子点中强耦合磁极化子激发态的性质 (2011年)

    导出强耦合磁极化子的第一内部激发态能量、激发能量和从第一内部激发态到基态的跃迁谱线频率随量子点的横向和纵向有效受限长度、磁场的回旋频率和电子-声子耦合强度的变化关系。数值计算结果表明:第一内部激发态能量...

    myLibs:我的图书馆

    类固醇| 回旋库 DMT | 数字地形模型库 DXF | 用于dxf文件的库 GA2D | 几何算法库 Helmert2D | 二维Helmert变换 矩阵| 矩阵库修改| ...

    lrucacheleetcode-algorithm-questions:Javascript中Leetcode算法问题的答案

    lru缓存leetcode 算法题 Javascript 中 Leetcode 算法问题的答案。 魔法弦 查找排列 按频率排序字符 数组中两个数字的最大异或 对角线遍历 下一个大元素 ...矩阵 ...排序矩阵中的第 ...回旋镖数量 最大连续数 II

Global site tag (gtag.js) - Google Analytics