打印蛇形矩阵

问题描述:给定一个整数矩阵,将该整数矩阵顺时针打印出来,

例如矩阵为    1   2   3   4

5   6   7   8

9  10  11 12

13  14  15 16

则顺时针输出为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10

分析:这道题其实没有涉及到复杂的算法和数据结构问题,也没有简单的方法来做,只能画图找出每次循环的边界来控制,

通过画图可以看出圈开始的第一元素可以作为我们的基准元素,确定了这个元素也就好办了。可以得出规律,每次的

基准元素位置都是上一个基准元素的位置两个下标均加上1,即可,循环的执行条件就是要求行数和列数都大于基准

元素下标的两倍。

具体的Java代码如下,写法比较通用,读者可以很容易转换为其他语言实现。

 1 public class Main {
 2     public static void orderprint(int a[][]){
 3         if(a==null){
 4             System.out.println("数组不存在");
 5             return ;
 6         }
 7         int row=a.length,column=a[0].length;
 8         if(row==0 || column==0){
 9             System.out.println("数组为空数组");
10             return ;
11         }
12         int startx=0,starty=0,endx,endy;
13         int i,j;
14         while(row>starty*2 && column>startx*2)
15         {
16             endx=column-1-startx;                      //计算出每圈的列边界
17             endy=row-1-starty;                         //计算出每圈的行边界
18             for(j=startx;j<=endx;j++)                  //上部从左到右打印
19                 System.out.print(a[starty][j]+",");
20             for(i=starty+1;i<=endy;i++)                //右部从上到下打印
21                 System.out.print(a[i][endx]+",");
22             for(j=endx-1;j>=startx;j--)                //下部从右到左打印
23                 System.out.print(a[endy][j]+",");
24             for(i=endy-1;i>starty;i--)                 //左部从下到上打印
25                 System.out.print(a[i][startx]+",");
26             startx++;starty++;                         //改变每圈第一数的位置
27         }
28     }
29     public static void main(String[] args) {
30         // TODO 自动生成的方法存根
31       int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
32       orderprint(a);
33     }
34
35 }

输出结果为:

1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10,

时间: 2024-10-12 16:08:26

打印蛇形矩阵的相关文章

打印蛇形矩阵的java实现

smartOJ[NOIP1995P3] import java.util.*; public class Main { public static void main(String[] args) { String str =null; Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[][] numbers = new int[n][n]; boolean[][] isE = new boolean

第3章第1节练习题1 蛇形矩阵

问题描述 蛇形矩阵即使用二维数组完成来回曲折的赋值,举例说明如下所示的形式即为蛇形数组. 算法思想 观察该二维数组,只是可以"人为"的发现它就像一条蛇的形状来回爬行,然而并没有什么卵用,不能明确的站在计算机的角度上来实现这个数组.于是将所有的下标列出来便可以得到下述所述的曲线走势. 然后结合第一张图便可以发现 数字从2~3的过程中,下标行变化范围是0~1:下标列范围是1~0: 数字从4~6的过程中,下标行变化范围是2~0:下标列范围是0~2: 数字从7~10的过程中,下标行变化范围是0

蛇形矩阵

如上图所示,是一个4*4的蛇形矩阵 算法思路 由图可观察到该矩阵可分为上三角和下三角.每个三角要根据蛇形的奇偶行进行计数. 算法代码 #include <stdio.h> int main() { int a[10][10]; int n; printf("Input n:"); scanf("%d",&n); int i=0,j=0,k=0; int count=1; for(i=0;i<n;i++)/*上三角 i代表是蛇形的奇偶行*/

随便写的蛇形矩阵

[问题描述] 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. [要求] [数据输入]本题有多组数据,每组数据由一个正整数N组成.(N不大于100) [数据输出]对于每一组数据,输出一个N行的蛇形矩阵.两组输出之间不要额外的空行.矩阵三角中同一行的数字用一个空格分开.行尾不要多余的空格. [样例输入] 5 [样例输出] 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 /*作者:Yosha*/ #include "stdio.h" int main() {

(水题)蛇形矩阵

1160 蛇形矩阵 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 输入描述 Input Description n(即n行n列) 输出描述 Output Description n+1行,n行为组成的矩阵,最后一行为

Java编码 蛇形矩阵的构建与遍历输出

一.蛇形矩阵的构建,并按行输出 例: 输入:n, 生成n*n的蛇形矩阵 1 2 3 8 9 4 7 6 5 输出:1 2 3 8 9 4 7 6 5 java编码 public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n = in.nextInt(); if(n < 0) return; if(n == 1){ Sys

蛇形矩阵与螺旋矩阵

自己写的蛇形矩阵:(蛇形矩阵就是在NXN矩阵格子上从左上到右下以"之"字型增加或减少,像蛇盘绕着的形状.本程序从左上开始盘旋一直到右下达到最大值) #include <iostream> using namespace std; #define n 10//输入要更改的矩阵大小 void main() { int a[n][n]={0},k=1,j=0,i=0,s1[4]={0,1,2,3},t1[4]={1,1,2,2},m=0; for (int t=1;t<=n

C版——打印螺旋矩阵

1.递归解法 递归解法如下: +--------------------------> X 轴 | 1   2   3   4 |  12 13 14 5 |  11 16 15 6 |  10 9   8   7 | Y轴 设元素1的坐标为(0,0),元素13的坐标为(1,1),--,任一元素的坐标为(x,y) 1 #include <stdio.h> 2 3 void SetMatrix(int **matrix, int x, int y, int start, int n) {

剑指offer (20) 打印螺旋矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; int nRows = matrix.size(); if (nRows == 0) return result; int nCols = matrix.at(0).size()