- 浏览: 188987 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
netwelfare:
这篇文章关于jsessionid讲解的不错。关于jsessio ...
关于JSessionID【转】 -
ITcms:
Activity直接执行了onCreate方法的那部分,我觉得 ...
Android之Activity学习 -
tinygroup:
Sorry发错了。
蛇形矩阵的java实现 -
tinygroup:
<pre name="code" c ...
蛇形矩阵的java实现 -
laitao:
[*]引用pulic djs
Servlet的生命周期
题目:
计算并输出 nXn 的蛇形矩阵。(n>0)
例如 4X4 的蛇形矩阵如下:
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
类似于前面的输出螺旋矩阵的方法,每一次在数组中填写新的数字都有一个方向,与输出螺旋数组不同的是不是简单的上下左右四个方向,这里涉及到右,下,右上,左下四个方向,针对每步操作都需要想好对应的处理方法,如:
1)向右上位置填写元素的时候可能会碰到行<0或者是列>=N,如果行小于0,那么接下来就需要向右填写元素,列大于等于N,那么很明显接下来就要向下填写元素。
2)向下添加元素时,也会碰到一些情况,例如行>=N了,表示添加到最后一行了,此时需要向右移动,另外在第一列和最后一列向下添加元素情况也不一样,在第一列向下添加元素后,接下来应该向右上添加元素,在最后一列向下添加元素后接下来应该向左下添加元素。
向左下和向右填写元素与这类似。
参加下面的代码(代码来自于http://blog.csdn.net/Mailbomb/archive/2008/07/05/2613736.aspx)
public static void main(String[] args) { /**2、计算并输出nXn的蛇形矩阵。(n>0) * 例如4X4的蛇形矩阵如下: * 1 3 4 10 * 2 5 9 11 * 6 8 12 15 * 7 13 14 16 */ //DOWN UPRIGHT RIGHT LEFTDOWN int n=5; int[][] data = new int[n][n]; int dire; //当前数字的移动方向 final int UPRIGHT = 0; //上右 final int DOWN = 1; // 下 final int LEFTDOWN= 2; //左下 final int RIGHT = 3;// 右 dire = DOWN; int value = 1; //数组元素的值 int row = 0; //第一维下标 int col = 0; //第二维下标 data[0][0] = 1; //初始化第一个元素 data[n-1][n-1] = n*n; while(value < n * n-1){ System.out.print("("+dire+")"); switch(dire){ case DOWN://DOWN -UPRIGHT +RIGHT -LEFTDOWN row++; //移动到下一行 if(row>=n){ //超过边界 row--; //后退 dire = RIGHT; continue; //跳过该次循环 } else { value++; //数值增加1 data[row][col] = value;//赋值 if(col==0) { dire = UPRIGHT; } else if(col==n-1){ dire = LEFTDOWN; } } break; case UPRIGHT://+DOWN -UPRIGHT +RIGHT LEFTDOWN row--; col++; //移动到上一行,右一列 if(col>=n)//超过边界 { row++; col--; //后退 dire = DOWN; continue; //跳过该次循环 } else if(row<0){ //超过边界 row++; col--; //后退 dire = RIGHT; continue; //跳过该次循环 } else { value++; //数值增加1 data[row][col] = value;//赋值 dire = UPRIGHT; } break; case RIGHT://+DOWN -UPRIGHT RIGHT -LEFTDOWN col++; //移动到右一列 if(col>=n){ col--; //后退 dire = DOWN; continue; //跳过该次循环 } else { value++; //数值增加1 data[row][col] = value;//赋值 if(row==0) { dire = LEFTDOWN; } else if(row==n-1){ dire = UPRIGHT; } } break; case LEFTDOWN://+DOWN UPRIGHT +RIGHT -LEFTDOWN row++; col--; //移动到下一行,左一列 if(row>=n) { //超过边界 row--;col++; //后退 dire = RIGHT; continue; //跳过该次循环 }else if(col<0)//超过边界 { row--;col++; //后退 dire = DOWN; continue; //跳过该次循环 } else { value++; //数值增加1 data[row][col] = value;//赋值 dire = LEFTDOWN; } break; } } System.out.println(); //输出数组中的元素 for(int i = 0;i < data.length;i++){ for(int j = 0;j < data[i].length;j++){ if(data[i][j] < 10){//右对齐 System.out.print(' '); } System.out.print(data[i][j]); System.out.print(' '); } System.out.println(); }
评论
3 楼
tinygroup
2015-04-03
Sorry发错了。
2 楼
tinygroup
2015-04-03
public static int[][] spiralMatrix(int n) { int circleMatrix[][] = new int[n][n]; for (int num = 1, x = 0, y = 0, xDir = 1, yDir = 0; num <= n * n; num++) { circleMatrix[x][y] = num; if (x + xDir < 0 || y + yDir < 0 || x + xDir == n || y + yDir == n || circleMatrix[x + xDir][y + yDir] != 0) {//如果到边界了就换方向 if (xDir != 0) { yDir = xDir; xDir = 0; } else { xDir = -yDir; yDir = 0; } } x += xDir; y += yDir; } return circleMatrix; }
1 楼
annie11640389
2013-05-14
建议先判断再移动
发表评论
-
Java序列化机制和原理【转】
2011-05-18 09:14 1140序列化的必要性 Java中,一切都是对象,在分布式环境中经 ... -
JAVA反射机制的应用(2)
2010-12-07 16:28 1253JAVA反射机制的应用(2 ... -
JAVA反射机制的简单应用(1)
2010-12-06 13:15 1435JAVA反射机制的简单应用(1) Spring中的IOC ... -
java反射学习笔记
2010-12-05 10:21 1559java反射作用: 1、自省:通过对象自身获得类结构,继 ... -
Java反射笔记(2)
2010-12-02 09:46 1733java.lang.array提供了动态 ... -
Java反射笔记(1)
2010-12-01 10:54 1138感谢张龙老师的视频:http://www.verycd.com ... -
连接池的基本工作原理及简单实现
2010-11-24 21:25 917连接池的基本工 ... -
Java 继承与组合的区别
2010-11-22 10:36 7991根据网络上大家对 ... -
两个矩阵的乘积的java实现
2010-11-10 16:23 8335题目: 计算两个矩阵 A、B 的乘积矩阵 C。 ... -
螺旋数组的java实现
2010-11-10 15:26 2098螺旋数组 要求:存储和输出nXm的螺旋数组,其中n和m为 ... -
统计一个整数中出现次数最多最大的数字
2010-11-10 09:31 6546要求: 统计一个整数中出现最多的数字。如果数字个数 ... -
“百元买百鸡问题”之一重循环实现
2010-11-09 10:06 3709问题描述: 每只母鸡 3 元,每只公鸡 4 元,每只小鸡 0 ... -
[转]欧几里得算法(辗转相除法)求最大公约数
2010-11-08 22:52 2869欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数 ... -
[转]深入理解自增自减运算符a=a++和a=++a
2010-11-07 23:04 3236更深入地理解自增自减运算符 首先贴一个非常简洁却 ... -
[转]java中char,byte,short的移位操作
2010-11-07 22:38 4743在Think in Java中有这么一段话“对c ... -
笔试题之以单词为最小单位翻转字符串
2010-11-06 15:39 2393最近做了几个公司 ... -
java解惑之无穷大和NaN
2010-11-01 10:12 17851、i == i + 1 一个数字永远不会等于它自己加1 ... -
java 死锁及解决
2010-10-31 21:28 1125Java线程死锁如何避免 ... -
深入Java关键字null
2010-10-31 14:20 838深入Java关键字null ... -
对java中equals和hashCode函数的一些理解2(转)
2010-10-31 11:24 1051一致性 即如果两个对象相等的话,那么它们必须始终保持相等,除非 ...
相关推荐
因此输出的形状,像条蛇,因此称为蛇形矩阵.
在Java编程中,实现蛇形矩阵是一种常见的算法问题,它涉及到了二维数组的处理和逻辑判断。蛇形矩阵,顾名思义,是按照蛇的行走路径填充一个n*n的矩阵。在这个问题中,我们首先要理解蛇形矩阵的规则,然后利用条件...
在给定的“JAVA蛇形数组(向下开始)”主题中,我们将重点讨论如何在Java中创建一个仅支持向下开始的蛇形数组。 首先,我们需要理解如何构建这样的数组。蛇形数组的构造可以通过迭代或递归的方式实现。在这个案例中...
在这里,我们将主要讨论这些资源的Java实现,以及如何通过它们来学习和提升Java编程技巧。 首先,LeetCode上的问题覆盖了数据结构、排序算法、图论、搜索等领域,是程序员提高算法基础和实践能力的理想平台。Java...
shell函数用于生成蛇形矩阵的第m层。该函数使用side函数来生成每一边的数字,并使用getcorner函数来计算左上角的数字值。 snakeMatrix函数用于生成整个螺旋矩阵。该函数使用shell函数来生成每一层的数字,并将这些...
描述 "33道 ACM算法题目 用java实现 ACM都已经通过" 暗示了这些算法已经被成功地用Java编程语言实现了,并且在实际的ACM竞赛环境中通过了测试,证明了它们的有效性和正确性。这涵盖了不同类型的算法,包括数学、数据...
**折线矩阵** 又称为Z形矩阵或蛇形矩阵,其遍历方式是沿着“Z”字形路径填充或读取矩阵元素。同样以左上角为起点,先按行填充,然后在每一行的末尾转折,沿对角线向下填充,再转折,如此反复,直到遍历完整个矩阵。...
4. **拉丁方阵**:拉丁方阵的生成可以使用回溯法或者深度优先搜索(DFS)实现。定义一个二维数组,初始化为1到N的数字,然后检查每一步是否符合拉丁方阵的条件。如果不符合,就回溯到上一步,尝试其他可能。这个过程...
Java 入门编程题目解析: 1. **等式求解与算术计算竖式** 这个问题涉及基础的字符串处理和数学逻辑。你需要创建一个程序,将字母替换为对应的数字,确保每个字母对应一个唯一的数字。可以使用哈希映射存储字母和...
此程序实现了一个矩阵的蛇形打印功能。 **代码解析:** 1. **输入处理:** - 使用 `Scanner` 类从标准输入读取数据。 - 首先读取一个整数 `n`,表示矩阵的大小。 - 创建一个 `n * n` 的二维数组 `int[][] array...
MATLAB允许矩阵处理,函数和数据绘制,算法实现,用户界面创建以及与用其他语言(包括C,C ++,C#,Java,Fortran和Python)编写的程序进行接口。 Matlab可以在以下网站的“产品”部分中找到: V-REP安装 具有集成...