`
vinkeychen
  • 浏览: 2028 次
  • 性别: 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语言编写回旋矩阵,可以产生任意阶的回旋矩阵,包括矩阵,以及图形的表示,直观

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

    在Python中,实现回旋矩阵(也称为螺旋矩阵或旋转矩阵)是一个有趣且具有挑战性的任务。通过构建一个按螺旋顺序填充数字的矩阵,可以加深对数组操作和循环控制的理解。本文将详细探讨如何使用Python结合numpy库来...

    C#中的回旋矩阵

    ### C#中的回旋矩阵实现 #### 知识点概览 本文将详细介绍如何在C#中实现一种特殊的矩阵——回旋矩阵。回旋矩阵是一种按照特定规则填充数字的二维数组,其特点是数字从中心向外扩展,且按照顺时针方向进行填充。此...

    输出回旋矩阵(c语言)

    回旋矩阵,也被称为螺旋矩阵或旋转矩阵,是一种特殊的矩阵排列方式。在回旋矩阵中,元素会按照顺时针或者逆时针方向螺旋式地填充。这种矩阵在某些算法和数据结构问题中有着广泛的应用,例如在图像处理、数组遍历等...

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

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

    学生系统opengl

    “回旋矩阵”在计算机图形学中用于表示旋转操作,是矩阵变换的一种,可能在学生系统中用于实现界面元素的动态旋转效果。 “计算机图形学”是开发OpenGL应用的基础,它涉及点、线、面的绘制,光照、纹理映射等概念,...

    基于C的回旋数

    1. **边界条件**:回旋数矩阵通常以一个固定的大小开始,如2x2、3x3等,然后随着需要填充的数字数量增加,矩阵的尺寸也会相应地增大。 2. **顺序规则**:数字填充遵循一定的顺序,通常是从左上角开始,沿着顺时针...

    Matlab 三维回旋仿真_matlab三维回旋仿真_

    在Matlab中进行三维回旋仿真是一个非常实用的技术,尤其对于物理、工程以及计算机图形学等领域的研究者和学生来说。本项目旨在为新手提供一个学习和交流的基础平台,帮助他们理解如何利用Matlab来模拟物体在三维空间...

    C# 回旋数 控制台程序

    回旋数,也被称为螺旋数或旋转数,是一种在矩阵中按照特定顺序排列的数字模式。在C#编程中,创建一个控制台程序来展示回旋数矩阵是一种很好的练习,可以提升对数组和循环控制的理解。这个程序的核心是通过嵌套的for...

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

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

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

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

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

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

    高精度环形谱仪等时性模式的闭轨校正模拟.pdf

    等时性模式是SRing的关键工作模式,它通过设定使得目标离子的回旋周期与动量无关,以提高时间分辨率。在这种模式下,由于β函数较大,任何磁铁场的误差或安装不准确都可能导致显著的闭轨畸变,进而影响线性光学性能...

    层次分析法在锚地选择中的应用PPT学习教案.pptx

    5. 归一化判断矩阵,计算特征向量和权重,判断矩阵的一致性指数(CI),评估矩阵的一致性。 6. 分别计算方案层对准则层的权重,再结合准则层的权重,综合评价每个锚地。 7. 排序锚地:根据计算出的权重,对各个锚地...

    四川省成都市石室中学2021届高三上期期末考试数学(理)试题 无答案.docx

    14. **回旋函数**:最后的解答题讨论了一种特殊的函数——回旋函数,需要理解回旋函数的定义,并能判断函数是否满足该性质。 这些题目覆盖了高中数学的主要知识点,通过解答这些题目,学生可以检验自己对这些概念的...

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

    在科学与工程领域,数据的分析与处理是至关重要的。...通过对本章的阅读和理解,可以为后续章节关于常用分布函数、随机数的产生和检验、随机模拟方法、矩阵算法以及多元线性与非线性回归分析的学习打下坚实的基础。

    premiere 视频滤镜详解word文档

    回旋核心滤镜基于数学表达式,通过矩阵运算改变像素邻近区域的值,从而创造出各种视觉效果,如模糊、锐化等。用户可以选择预设的矩阵模式,也可以自定义数值。Scale参数用于缩放矩阵的影响,Offset参数则为计算结果...

    层次分析法在锚地选择中应用PPT学习教案.pptx

    通过构造两两比较矩阵,对每个因素进行权重分配,计算判断矩阵的特征根和一致性比率(CR),以检验判断矩阵的一致性。通过这一过程,可以量化各因素的重要性。 4. 综合评价:根据准则层对方案层的评价,结合各因素...

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

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

Global site tag (gtag.js) - Google Analytics