欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

回形数的Java代码

程序员文章站 2022-04-05 16:06:53
...

题目:回形数(只是我的理解)

这就和我一起来看看这个题的题目 吧!(由于是后期记忆,所以不是和面试的时候一模一样,但是大概意思是相同的)如下图所示。
回形数的Java代码
来我们一起来分析分析这个题。咋一看是不是非常简单!(恭喜你,有这样的心态是非常好的)

分析题目

  1. 首先用户输入的数字便决定了矩阵(方阵)的维度,可以理解吧?
  2. 其次分析矩阵中的数字。数字就像小时候我们吃过的面包圈,当然这个是方的,就好比我第一次的脑袋(方的)。数字逐次加1,一圈一圈的往里面绕,绕到矩阵没有位置了才停下来。(这样一分析是不是感觉解题思路清晰了呢?悄悄的说一声,我反正没有)

解题

解题思路

  1. 首先我们可以确定的是,它是一圈一圈走的,只是说起点、开始数据不同。其它的好像也没别的。就好比我们看到的一个个“”字放缩到一起。如下图
    回形数的Java代码
  2. 图都给你们画出来了(吐槽一下,这不是我画的哦)。言归正传,上述的图给人是不是会绕晕在里面,所以我们应该用到的是递归函数有问题吗?我们只需要写好最外层的,那里面的那些是不是就一个个就会写好。当然会有人考虑到用while循环,其实也能做。看个人喜好了。
    话不多说,上代码。

Java代码

我也是自己研究的,所以可能方法上还有更好的,以及代码的冗余也是有可能改进的。这个任务就交给看到它的你,给我提提意见咯!额,好像没啥了。那就有空常来看看这个可怜人的文章 吧(虽然不多,后续会继续更新)

import java.util.Scanner;

public class HuiXingShu{
	public static void main(String[] args) {
		
//		这部分主要是让用户输入一个整数(维度)
		System.out.print("请输入你的维度:");
		Scanner scanner = new Scanner(System.in);
		int Weidu = scanner.nextInt();
		
//		这部分是定义一个二维数组
		int[][] array = new int[Weidu][Weidu];
		
//		调用递归函数
		HuiXin(array,0,Weidu,1);
		
//		打印相应的矩阵到屏幕上
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				System.out.printf("%-3d ",array[i][j]);
			}
			System.out.println();
		}
	}
	
//	递归函数(以下解释以三维的矩阵为例)其中参数解释如下:
//	array:二维数组
//	x:表示每个圈的起始横纵下标
//	Weidu:表示每个圈的大小
//	number:每个圈起始的数字
	public static void HuiXin(int[][] array,int x,int Weidu,int number){
		
		if ((Weidu-2)>=0) {
			
//			此循环是为了赋值   1,2(行下标不变,列下标变化)
			for (int i = 0; i < Weidu-1; i++) {
				array[x][x+i] = number++;
			}
			
//			此循环是为了赋值   3,4(行下标变化,列下标不变)
			for (int i = 0; i < Weidu-1; i++) {
				array[x+i][x+Weidu-1] = number++;
			}
			
//			此循环是为了赋值   5,6(行下标不变,列下标变化)
			for (int i = Weidu-1; i >0 ; i--) {
				array[x+Weidu-1][x+i] = number++;
			}
			
//			此循环是为了赋值   7,8(行下标变化,列下标不变)
			for (int i = Weidu-1; i >0 ; i--) {
				array[x+i][x] = number++;
			}
			
			HuiXin(array, x+1, Weidu-2, number);
		}
		else if ((Weidu-1)==0) {
			array[x][x] = number++;
			HuiXin(array, x+1, Weidu-2, number);
		}
		else {
			return ;
		}
	}
}