zoukankan      html  css  js  c++  java
  • 回形数字矩阵(Java)

    将矩阵从里到外分为多层,每一层都是一个口字型数字序列,方向都是顺时针/逆时针,由此我们可以将问题分解为相同的子问题来解决


    回形矩阵概述

    ☃ 回形矩阵有n行n列

    ☃ 数字按顺时针或者逆时针递增

    使用Java打印n*n回形矩阵

    /*
     * 打印长为n的回形数
     *yx------------
     *| 1  2  3  4
     *| 12 13 14 5
     *| 11 16 15 6
     *| 10  9 8  7
     */ 
    public class RingArray {
    	@SuppressWarnings("resource")
    	public static void main(String[] args) {
    		/*
    		 * 打印长为n的回形数
    		 *yx------------
             *| 1  2  3  4
    		 *| 12 13 14 5
    		 *| 11 16 15 6
    		 *| 10  9 8  7
    		 */     
    		pointRingArray1();
    		pointRingArray2();
    	}
    	/*
    	 * @Description: 打印回形数方法1
    	 * @data: 下午3:01:21
    	 */
    	public static void pointRingArray1() {
    		int n = 0;
    		System.out.print("请输入回形矩阵长度n:");
    		@SuppressWarnings("resource")
    		Scanner sc = new Scanner(System.in);
    		n = sc.nextInt();
    		// x,y的最小下标;x是横向,列;y是纵向,行
    		int minX = 0,minY = 0;
    		// x,y的最大下标;
    		int maxX = n-1,maxY = n-1;
    		int[][] arr = new int[n][n];
    		int index = 1;  //计数
    		while(minX <= maxX) {
    			for(int x = minX;x <= maxX;x++) {
    				arr[minY][x] = index;
    				index++;
    			}
    			minY++;
    			for(int y = minY;y <= maxY;y++) {
    				arr[y][maxX] = index;
    				index++;
    			}
    			maxX--;
    			for(int x = maxX; x >= minX;x--) {
    				arr[maxY][x] = index;
    				index++;
    			}
    			maxY--;
    			for(int y = maxY; y >= minY;y--) {
    				arr[y][minX]=index;
    				index++;
    			}
    			minX++;
    		}
    		System.out.println("顺时针打印:");
    		for(int y = 0;y < n;y++) {
    			for(int x = 0;x < n;x++) {
                    //顺时针打印				
    				System.out.print(String.format("%4d",arr[y][x]));
    				//逆时针打印
    				//System.out.print(String.format("%4d",arr[x][y]));
    			}
    			System.out.println();
    		}
    	}
    	
    	/*
    	 * @Description: 打印回形数方法2
    	 * @data: 下午3:01:21
    	 */
    	@SuppressWarnings("resource")
    	public static void pointRingArray2() {
    		Scanner scanner = new Scanner(System.in);
    		System.out.print("请输入回形矩阵长度n:");
    		int len = scanner.nextInt();
    		int[][] arr = new int[len][len];
    
    		int s = len * len;
    		/*
    		 * k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
    		 */
    		int k = 1;
    		int i = 0, j = 0;
    		for (int m = 1; m <= s; m++) {
    			if (k == 1) {
    				if (j < len && arr[i][j] == 0) {
    					arr[i][j++] = m;
    				} else {
    					k = 2;
    					i++;
    					j--;
    					m--;
    				}
    			} else if (k == 2) {
    				if (i < len && arr[i][j] == 0) {
    					arr[i++][j] = m;
    				} else {
    					k = 3;
    					i--;
    					j--;
    					m--;
    				}
    			} else if (k == 3) {
    				if (j >= 0 && arr[i][j] == 0) {
    					arr[i][j--] = m;
    				} else {
    					k = 4;
    					i--;
    					j++;
    					m--;
    				}
    			} else if (k == 4) {
    				if (i >= 0 && arr[i][j] == 0) {
    					arr[i--][j] = m;
    				} else {
    					k = 1;
    					i++;
    					j++;
    					m--;
    				}
    			}
    		}
    
    		System.out.println("逆时针打印:");
    		for (int m = 0; m < arr.length; m++) {
    			for (int n = 0; n < arr[m].length; n++) {
    				//顺时针打印
    				//System.out.print(String.format("%4d",arr[m][n]));
    				//逆时针打印
    				System.out.print(String.format("%4d",arr[n][m]));
    			}
    			System.out.println();
    		}
    	}
    }
    

    效果:


    本博客与CSDN博客༺ཌ༈君☠纤༈ད༻同步发布

  • 相关阅读:
    Django之使用内置函数和celery发邮件
    Django之FBV和CBV的用法
    使用xampp将angular项目运行在web服务器
    Django之使用中间件解决前后端同源策略问题
    Spring cloud Feign 调用端不生效
    进程同步——哲学家进餐问题Java实现
    数据库事务四大特性、隔离级别
    B树 B+树 红黑树
    SpringCloud Config Bus webhook 只能刷新config server 不能刷新config client
    Java8 容器类详解
  • 原文地址:https://www.cnblogs.com/asio/p/12361858.html
Copyright © 2011-2022 走看看