`

二维数组顺时针读取

 
阅读更多
这是一个很疯狂的举动,这种冲动来自于一道面试题,当时有种暴走的举动,我一度认为这不可能做到,但是有一天我突然想到一个方法可以让它实现起来很简单,就是一个划整为零的问题。下面是实现代码:
import java.util.Arrays;
import java.util.Collections;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
class ArrayTest 
{
	public static void main(String[] args) 
	{
		int[][] arr = new int[][]{
			{ 1, 2, 3, 4},
			{12,13,14, 5},
			{11,16,15, 6},
			{10, 9, 8, 7}
		};

		Queue<Integer> toQueue = new LinkedBlockingQueue<Integer>();
		read(arr,toQueue);
		for(Integer i : toQueue){
			System.out.print(i+"\t");
		}

	}
	public static void read(int[][] arr,Queue<Integer> toQueue){
		//计算这个矩阵的长和宽
		int h = arr.length;//高
		int w = arr[0].length;//宽

		for(int i=0;i<w;i++){
			toQueue.add(arr[0][i]);
		}
		if(h==1){
			return;
		}

		//去掉二维数组的第一行并逆时针旋转90度
		Queue<Integer> queue = new LinkedBlockingQueue<Integer>();
		for(int i=w-1;i>=0;i--){
			for(int j=1;j<h;j++){
				queue.add(arr[j][i]);
			}
		}
		int[][] rArr = new int[w][h-1];
		for(int m=0;m<rArr.length;m++){
			for(int n=0;n<rArr[m].length;n++){
				rArr[m][n] = queue.poll();
			}
		}
		for(int m=0;m<rArr.length;m++){
			System.out.println(Arrays.toString(rArr[m]));
		}
		System.out.println();
		read(rArr,toQueue);
	}
}
1
3
分享到:
评论

相关推荐

    C++语言写的螺旋数组

    螺旋数组,也称为螺旋矩阵,是一种特殊的二维数组排列方式,其特点是元素按照顺时针或逆时针方向从外向内连续填充。在C++编程中实现螺旋数组,需要掌握基本的数组操作、循环控制以及条件判断。接下来,我们将深入...

    国家计算机二级考试C语言100套上机题目录.pdf

    29. 矩阵外围元素顺时针旋转:需要理解矩阵旋转的原理和二维数组的操作。 30. 奇数和偶数分离:数组元素的分类存储。 31. 长度超限字符串的删除:字符串数组操作。 32. 单向链表节点按数据域排序:链表操作和排序...

    高级语言程序设计(一) :第5讲 程序设计方法(三)

    课程的目标是掌握二维数组的定义与初始化、指针的使用、指针与数组的关系、指针作为函数参数、指针数组以及结构的定义和使用,同时也涉及到了自引用结构的概念。 首先,我们来看二维数组,它在C语言中被视为元素为...

    Matrix变换

    假设我们有一个n×n的二维数组,顺时针旋转90度意味着数组的最左边一列将变为新的最上面一行,而原来的最上面一行将成为新的最右边一列。逆时针旋转则是相反的过程。 为了实现这个功能,我们可以采用以下步骤: 1....

    c语言程序设计 螺旋矩阵

    二维数组实际上是一组一维数组的集合,可以理解为行和列组成的表格。例如,我们可以声明一个5x5的二维数组来存储5行5列的矩阵元素。 2. **初始化数组**: 初始化二维数组时,我们通常使用大括号{}来指定每个元素的...

    打印螺旋上三角(C语言实现)

    例如,一个二维数组可以看作是一个矩阵,每个元素由行索引和列索引定位。对于螺旋上三角,我们需要创建一个二维数组来存储数据。 2. **初始化二维数组**: 首先,我们需要定义一个二维数组,其大小通常会根据输入...

    蓝桥杯JAVA试题

    【蓝桥杯JAVA试题】是针对初级Java学习者的一道编程题目,主要考察的是二维数组的处理、循环控制以及条件判断等基础知识。题目要求编写一个程序,能够填充一个n阶方阵的上三角区域,填充规则是按照顺时针方向螺旋...

    CCF PTA编程培训师资认证考试-P试卷-C++

    1. **二维数组初始化:**按指定规则填充二维数组。 2. **子矩阵旋转:**实现子矩阵的顺时针或逆时针旋转。 **详细解析:** - **输入输出:**从标准输入读取方阵的大小和魔法施放次数,以及每次魔法的具体参数。输出...

    vb 螺旋方式打开图片

    在VB中,我们可以利用二维数组来存储图片的像素信息,通过控制数组的索引顺序,模拟这个过程。 1. **创建图片数组**:首先,我们需要创建一个与图片大小相匹配的二维数组,每个元素代表图片的一个像素。数组的行数...

    C++递归实现螺旋数组的实例代码

    在编程领域,螺旋数组是一种特殊的二维数组布局,其中元素按照顺时针或逆时针的螺旋顺序填充。C++中的螺旋数组可以通过递归方法实现,这样的实现方式既直观又易于理解。本文将详细探讨如何使用C++递归来创建螺旋数组...

    Spiral-matrix:螺旋矩阵

    螺旋矩阵是一种特殊的二维数组,它的元素按照特定的螺旋顺序排列。在给定的题目中,我们需要生成一个n×n的正方形矩阵,其中包含了从1到n²的所有自然数,并且这些数字按照顺时针方向螺旋排列。这个问题是数据结构和...

    matlab 界面实现任意彩色 灰度图像放大缩小 任意角度旋转

    灰度图像则是一维或二维数组,表示每个像素的灰度值。要将彩色图像转换为灰度图像,可以使用`rgb2gray`函数,如`gray_img = rgb2gray(img)`。 接下来,我们探讨图像的放大和缩小。在MATLAB中,`imresize`函数是实现...

    螺旋矩阵(C语言版)

    在计算机科学中,生成螺旋矩阵是一个常见的编程练习,有助于理解二维数组的处理以及循环控制结构的应用。本次解析将围绕“螺旋矩阵(C语言版)”这一主题,深入探讨其核心概念、算法实现逻辑及C语言代码细节。 ### ...

    bmp读取 放大 缩小 旋转90度 最近写的 ^0^

    读取BMP文件时,我们需要解析文件头和信息头来获取图像尺寸和格式,然后读取像素数据到内存中形成二维数组,每个元素代表一个像素的RGB颜色值。这个过程通常涉及二进制文件的读取操作,例如在C++中使用`ifstream`类...

    湖南省大学生程序设计大赛题

    - **二维数组处理**: 字符矩阵可以用二维数组来表示,因此需要掌握如何在二维数组中进行搜索。 - **方向遍历**: 除了传统的横向和纵向遍历外,还需要考虑斜向等方向上的遍历。 **实现思路**: 1. **读取输入**:...

    ACM算法与程序设计(一)1

    矩阵旋转题目要求对二维数组进行操作,这需要掌握数组处理和矩阵变换的知识。顺时针旋转90度涉及到行与列的交换,对编程逻辑的组织有一定要求。 最大子阵问题是一个经典的动态规划或贪心算法题目,目标是找到矩阵中...

    2013年华科计算机考研上机第二题

    首先,代码中定义了多个二维数组用于存储不同的信息: - `int visit[M][M];`:用于标记当前位置是否已经被访问过。 - `int mp[M][M];`:用于存储最终的矩阵数据。 - `int mov[4][2]`:定义了四个方向的移动向量,...

    BMP_Reverse_90_degree.rar_bmp图像旋转_bmp旋转90°_图像旋转90度

    BMP文件通常以二维数组的形式存储像素数据,通常是按行优先顺序。 在对BMP图像进行90度旋转时,我们需要进行以下几个关键步骤: 1. **读取图像**: 使用C++的文件流(fstream)或库(如OpenCV)来读取BMP文件的头...

    位图旋转的算法,不改变图片大小直接显示的

    位图通常由一个二维数组(或称为矩阵)表示,其中每个元素代表一个像素,包含该像素的色彩信息。位图的旋转可以通过两种主要方法来实现:仿射变换和逐像素旋转。 1. **仿射变换**: 仿射变换是一种线性几何变换,...

Global site tag (gtag.js) - Google Analytics