回形数字矩阵(Java)

来源:互联网 发布:常德seo 编辑:程序博客网 时间:2024/05/01 10:13
  • 问题
    这里写图片描述

  • 解决思想(递归)
    将矩阵从里到外分为多层,每一层都是一个口字型数字序列,方向都是顺时针,由此我们可以将问题分解为相同的子问题,采用递归算法

  • 源代码

import java.util.Scanner;/** *  * @author Vinsmoke *  *  * 打印回形矩阵 * * */public class Pattern {    static int n;         static int sum;    //矩阵数字总个数    static int flag = 1;    static int[][] pattern;    /*     * 打印图案功能,其中n为图案矩阵的行列数     */    static void printPattern(int layer) {        // 上:赋值        for (int i = layer; i < n - layer - 1; i++) {            pattern[layer][i] = flag++;            if (flag > sum)                return;        }        // 右:赋值        for (int i = layer; i < n - layer - 1; i++) {            pattern[i][n - layer - 1] = flag++;            if (flag > sum)                return;        }        // 下:赋值        for (int i = n - layer - 1; i > layer; i--) {            pattern[n - layer - 1][i] = flag++;            if (flag > sum)                return;        }        // 左:赋值        for (int i = n - layer - 1; i > layer; i--) {            pattern[i][layer] = flag++;            if (flag > sum)                return;        }        printPattern(++layer);    }    public static void main(String[] args) {        // TODO Auto-generated method stub        System.out.println("请输入矩阵的行列数:");        Scanner scan = new Scanner(System.in);        n = scan.nextInt();        pattern = new int[n][n];        //预处理奇偶数的不同        if(n%2==0)            sum=n*n;        else{            sum=n*n-1;            pattern[(n-1)/2][(n-1)/2]=n*n;        }        printPattern(0); //递归        // 输出图案        for (int[] row : pattern) {            for (int column : row) {                System.out.print(column + "\t");            }            System.out.println();        }    }}
原创粉丝点击