- 浏览: 185817 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
netwelfare:
这篇文章关于jsessionid讲解的不错。关于jsessio ...
关于JSessionID【转】 -
ITcms:
Activity直接执行了onCreate方法的那部分,我觉得 ...
Android之Activity学习 -
tinygroup:
Sorry发错了。
蛇形矩阵的java实现 -
tinygroup:
public static int[][] spira ...
蛇形矩阵的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 1075序列化的必要性 Java中,一切都是对象,在分布式环境中经 ... -
JAVA反射机制的应用(2)
2010-12-07 16:28 1185JAVA反射机制的应用(2 ... -
JAVA反射机制的简单应用(1)
2010-12-06 13:15 1371JAVA反射机制的简单应用(1) Spring中的IOC ... -
java反射学习笔记
2010-12-05 10:21 1515java反射作用: 1、自省:通过对象自身获得类结构,继 ... -
Java反射笔记(2)
2010-12-02 09:46 1683java.lang.array提供了动态 ... -
Java反射笔记(1)
2010-12-01 10:54 1094感谢张龙老师的视频:http://www.verycd.com ... -
连接池的基本工作原理及简单实现
2010-11-24 21:25 868连接池的基本工 ... -
Java 继承与组合的区别
2010-11-22 10:36 7936根据网络上大家对 ... -
两个矩阵的乘积的java实现
2010-11-10 16:23 8288题目: 计算两个矩阵 A、B 的乘积矩阵 C。 ... -
螺旋数组的java实现
2010-11-10 15:26 2043螺旋数组 要求:存储和输出nXm的螺旋数组,其中n和m为 ... -
统计一个整数中出现次数最多最大的数字
2010-11-10 09:31 6493要求: 统计一个整数中出现最多的数字。如果数字个数 ... -
“百元买百鸡问题”之一重循环实现
2010-11-09 10:06 3667问题描述: 每只母鸡 3 元,每只公鸡 4 元,每只小鸡 0 ... -
[转]欧几里得算法(辗转相除法)求最大公约数
2010-11-08 22:52 2812欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数 ... -
[转]深入理解自增自减运算符a=a++和a=++a
2010-11-07 23:04 3183更深入地理解自增自减运算符 首先贴一个非常简洁却 ... -
[转]java中char,byte,short的移位操作
2010-11-07 22:38 4704在Think in Java中有这么一段话“对c ... -
笔试题之以单词为最小单位翻转字符串
2010-11-06 15:39 2346最近做了几个公司 ... -
java解惑之无穷大和NaN
2010-11-01 10:12 17421、i == i + 1 一个数字永远不会等于它自己加1 ... -
java 死锁及解决
2010-10-31 21:28 1093Java线程死锁如何避免 ... -
深入Java关键字null
2010-10-31 14:20 803深入Java关键字null ... -
对java中equals和hashCode函数的一些理解2(转)
2010-10-31 11:24 1021一致性 即如果两个对象相等的话,那么它们必须始终保持相等,除非 ...
相关推荐
因此输出的形状,像条蛇,因此称为蛇形矩阵.
生成一个n阶的蛇形矩阵的java程序 输入矩阵宽度n生成宽度为n的递增的蛇形矩阵
java 蛇形矩阵 最简单的 初学者用
C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之...
学习数组或则循环结构时经常遇到的一个可以说是经典的问题——蛇形矩阵
使用二维数组和双重循环打印蛇形矩阵使用二维数组和双重循环打印蛇形矩阵使用二维数组和双重循环打印蛇形矩阵
蛇形矩阵的实现的经典案例for(i=1;i;i++)/*对副对角线上三角端点赋值*/ { k=k+i; if(i%2==1) { a[0][i]=k; a[i][0]=k+i; } else { a[i][0]=k; a[0][i]=k+i; } }
以前用c++写的一个蛇形矩阵
蛇形矩阵递归算法,通过简单地递归实现蛇形矩阵的输出
用C++写的一个蛇形矩阵,当输入一个整数n(10>=n>=1)时,输出大小为n行n列的蛇形矩阵。
这是一个c语言的作业,能够输出逆时针蛇形矩阵,很好用!!
// 例如 4 x 4 蛇形矩阵 // 1 3 - 4 10 // | / / / | // 2 5 9 11 // / / / // 6 8 12 15 // | / / / | // 7 13 - 14 16 http://blog.csdn.net/ssuchange/article/details/17347743
基于c++的蛇形矩阵,通过用户输入蛇形矩阵的维数,自动具体输出蛇形排列矩阵
c++练习题蛇形矩阵
蓝桥杯—蛇形矩阵题解.zip 是一个压缩文件,包含了关于蛇形矩阵问题的详细题解和代码实现。该资源旨在帮助参加蓝桥杯竞赛的选手更好地理解蛇形矩阵问题,并提供相应的解决方案和代码示例。 内容概要: 该压缩文件...
自己写的一个小程序,输入一个整数N,输出N阶逆时针蛇形矩阵
输入正方形数字矩阵边长 a,,如样例所示规律,输出矩阵(不要求对齐,每行每个数分别用一个空格格开)。 样例: 输入: 4 输出: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入: 5 输出: 13 14 15 16 1 ...
三种蛇形矩阵的具体算法
蛇形矩阵的源代码,自己写的……不对的地方还望指教
利用visual c++实现的蛇形矩阵的程序