题目描述
由上图描述,输入一个数字n,代表n行n列,之后经过函数之后顺时针的将从1到n打印出来。
算法分析
通过找规律,我们可以发现,最终的结果是一个正方形,那么我们可以联想到用一个二维数组按顺序来存储这些数字,最后输出二维数组即可,同时,这些数字是一圈一圈按照顺时针递增的,因此我们可以将这个二维数组拆开一圈一圈来看,我们画图来表示一下
以n=5为例
最后的二维数组需要储存成这个样子,那么我们可以将其分为三圈
第一圈:
第二圈:
第三圈:
我们如果按照圈来储存的话,那么他们按照顺时针存储的规律就是一样的了,即先顺序的储存最上边的一行,然后顺序的储存最右边的一列,之后再倒序的存储最下边的一行,最后倒序的存储最左边的一行,那么储存完一圈后,继续按照这个循环,每存储完一圈之后,开始行,结束行,开始列,结束列都会靠近(因为圈变小了)最后的第三圈只有一个数字,那么这个时候意味着开始行和结束行,开始列结束列已经相同了,当开始行大于结束行,开始列大于结束列时,循环结束,即二维数组储存完毕,最后直接输出二维数组即可
代码分析
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: hp
* Date: 2022-07-12
* Time: 11:08
*/
public class Dragon {
public static void main(String[] args) {
Scanner scanner