蛇形填数

时间:2019-02-20
本文章向大家介绍蛇形填数,主要包括蛇形填数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题描述

输入数字n,输出相应的蛇形矩阵

输入样例

5

输出样例

1    2    3    4    5
16  17  18  19  6
15  24  25  20  7
14  23  22  21  8
13  12  11  10  9

问题分析

可以将输出结果通过二维数组来保存,横纵坐标分别对应该数在输出结果中的位置。这样我们只需要确定每个坐标的结果即可解决该问题。通过观察我们可以将蛇形矩阵分成逐渐变小的正方形圈,其中每一圈都有相同的规律,即从左顶点依次向右、向下、向左、向上连续递增(除只有一个数的正方形圈之外)。这样我们就可以通过两层for循环来计算结果,其中外层循环控制第几个正方形圈,内存循环分别计算圈内各个边的数

源码

public static void main(String args[])
{
	Scanner in = new Scanner(System.in);
	//输入数字n
	int n = in.nextInt();
	if(n == 0)
	{
		return ;
	}
	//输出结果矩阵
	int result[][] = new int[n][n];
	int k = 1;
	//外层控制第几个正方形圈
	for(int i=0;i<(n+1)/2;i++)
	{
		//正方形圈的上边
		for(int j=i;j<n-i;j++)
		{
			result[i][j] = k++;
		}
		//正方形圈的右边
		for(int j=i+1;j<n-i;j++)
		{
			result[j][n-i-1] = k++;
		}
		//正方形圈的下边
		for(int j=n-i-2;j>=i;j--)
		{
			result[n-i-1][j] = k++;
		}
		//正方形圈的左边
		for(int j=n-i-2;j>i;j--)
		{
			result[j][i] = k++;
		}
	}
	//打印输出结果
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			System.out.print(result[i][j]+"\t");
		}
		System.out.println("\n");
	}
}

测试结果