今天在BBS里面看到这样的面试题目,
1,二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4:
4*4二维数组
{ 1 2 3 4 } { 5 6 7 8 } { 9 10 11 12 } {13 14 15 16 }
打印顺序
4 3 8 2 7 12 1 6 11 16 5 10 15 9 14 13
要求半个小时内写出可完整运行的代码。
我试着自己写了下
注:如果要copy代码玩,代码中用到了junit 和slf4j 自行导入
package common; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @version 1.0.7 2014年6月13日 下午8:41:24 * @since 1.0.7 */ public class TwoDimensionalArrayTest{ private static final Logger log = LoggerFactory.getLogger(TwoDimensionalArrayTest.class); private Integer[][] array; @Before public void init(){ int i = 9; //**************构造二维数组************************************ array = new Integer[i][i]; for (int j = 0; j < i; ++j){ array[j] = new Integer[i]; for (int k = 0; k < i; ++k){ array[j][k] = i * j + 1 + k;//由于值是从1 开始的,而循环的索引是从0开始的,固需要+1, 处理 } } } @Test public final void test(){ //总行数 int rows = array.length; //第几行 for (int row = 0; row < rows; ++row){ //每一行循环 开始数字 索引列 int columns = beginColumns(rows, row); //columns 列数 for (int column = columns; column >= 0; --column){ //以输出整行为出发点 //row&column 定位 这行输出起始坐标点 System.out.println(getCurrentLineString(rows, row, column)); } } } /** * 获得这行输出的结果 * * @param rows * 总行数 * @param row * 输出起始行 * @param column * 输出起始列 * @return */ private StringBuilder getCurrentLineString(int rows,int row,int column){ //------------------------------------------------------------------- //concatCount表示 当前这个数字 最大连接数字 个数 int concatCount = (rows - row) - column; StringBuilder sb = new StringBuilder(); //line控制当前行 输出数字的数量 for (int line = 0; line < concatCount; ++line){ sb.append(array[row + line][column + line]); if (line != concatCount - 1){//不是最后一行 添加个 "" sb.append(" "); } } //------------------------------------------------------------------- return sb; } /** * 倒序开始迭代索引,第一行会从 i-1开始,其余行都会从0开始 * * @param i * @param totalLine * @return */ private int beginColumns(int i,int totalLine){ //这一行可用循环倒序 索引 //比如第一行是 i个 //第二行到第i行都是0 if (totalLine == 0){ return i - 1; } return 0; } }
结果
9 8 18 7 17 27 6 16 26 36 5 15 25 35 45 4 14 24 34 44 54 3 13 23 33 43 53 63 2 12 22 32 42 52 62 72 1 11 21 31 41 51 61 71 81 10 20 30 40 50 60 70 80 19 29 39 49 59 69 79 28 38 48 58 68 78 37 47 57 67 77 46 56 66 76 55 65 75 64 74 73
写完,看了网友精彩的回复,相比较,他们的代码更加简单,
比如有的一层循环搞定 http://www.iteye.com/topic/1134016?page=3#2409864
有的两层循环搞定 http://bylijinnan.iteye.com/blog/2056301
但是我觉得我的代码更易懂,更容易理解
相关推荐
Java 求一个3*3矩阵对角线元素之和,实现的思路主要是利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。也就计算对角线之和。计算对角线之和代码分享: for(int i = 0;i ;i ) { for(int j = 0;j ;j ...
1、由键盘对4×4的二维数组初始化,计算其两条对角线元素之和并输出。 2、通过二维数组实现杨辉三角的前10行并输出。杨辉三角形式请参考教材P153。 3、将M×N的矩阵转置成N×M的矩阵并输出。
掌握求二维数组正对角线元 素和的操作; 55 了解求二维数组最大值的元 素及下标的操作; 6 了解求二维数组所有和或所 有列的和的操作。 复习:二维数组元素引用 数据类型 数组名[行标][列标] //行标与列标都不能越界...
该资源给出了Matlab中关于三维数组的相关操作,包括:访问三维数组中的元素,取三维数组中每个二维矩阵的对角线元素,三维数组转置,对三维数组中每层的二维矩阵进行求和,对三维数组中每层的二维矩阵进行平均值计算...
本文实例为大家分享了python实现二维数组的对角线遍历,供大家参考,具体内容如下 第一种情况:从左上角出发,右下角结束 要完成的事情,就像下图: 话不多说,直接上Python实现代码与结果展示: # 输出遍历的索引...
题目:求一个3*3矩阵对角线元素之和。 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 def two_dimensionalArray(self): '二维数组实现求三阶矩阵的对角线元素之和' sum = 0 matrix = [...
设计一个程序,求一个4*4矩阵的对角线之和(注意包括主对角线和副对角线)?
使用JS实现二维数组的各种翻转和旋转(水平翻转,垂直翻转,对角线翻转,旋转等)等变换,提供所有源码及实例演示页面。
二维数组赋值和指针操作,二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。...对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
C语言程序设计-求5行5列矩阵的主、副对角线上元素之和;注意,两条对角线相交的元素只加一次;例如:主函数中给出的矩阵的两条对角线的和为45;
对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。 Python中创建二维数组 Python中的列表list可以当做一维数组使用,但是没有直接的定义使用二维数组。如果直接使用a = [][]会产生SyntaxError: ...
资源共享,有什么错误和好的建议请指出 如果没资源分,我可以直接发给你)
leetcode二维数组力码 我的 LeetCode 记录 561.阵列分区I(2018.3.15 ...如果从左上角到右下角的每个对角线都具有相同的元素,则矩阵是 Toeplitz。 现在给定一个 M x N 矩阵,当且仅当矩阵是 Toeplitz 时才返回
线性规划简单对角线<二维数组处理> 采用二维数组进行对角线验证 数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个...
将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题) Example: Input: [ [1,2,3,4], [5,1,2,3], [9,5,1,2] ] Output: [[4], [3, 3], [2, 2, 2], [1, 1, 1], [5, 5],...
2018/06/09 周六 20:15 623 02同行列对角线的格子.cpp 2018/06/09 周六 20:31 295 03计算矩阵边缘元素之和.cpp 2018/06/09 周六 21:21 667 04错误探测.cpp 2018/06/09 周六 21:24 870 05计算鞍点.cpp 2018/06/09 ...
C语言程序设计-在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的平方和,并在fun()函数中输出;.c
从键盘上输入矩阵的阶数n(n),然后按以下规律形成二维数组Anxn:A中第一行元素为1,2,……n;第二行元素为n+1,n2,……2n;第三+行元素为2n+1,2n+2,……3n;…… 然后计算:(1)A中所有不靠边元素之和sum1;(2)A...
在 NxN 框中计算三个中值:MR 是水平和垂直 R 像素的中值,MD 是对角线 D 像素的中值。 过滤后的值是两个中值和中心像素C的中值:median([MR,MD,C])。 B = HMF(A) 使用 N = 5(默认值)。 A 可以是二维数组或 RGB...