2011 蓝桥杯模拟试题08 回型矩阵(java)


从键盘输入一个整数( 1~20)


则以该数字为矩阵的大小,把 1,2,3⋯ n*n 的数字按照顺时针螺旋的形式填入其中。例如:


输入数字 2,则程序输出:
1 2 

4 3 


输入数字 3,则程序输出:
1 2 3 
8 9 4 

7 6 5 


输入数字 4, 则程序输出:

1 2 3 4

12 13 14 5

11 16 15 6 

10 9 8 7


思路:

    我们可以把矩阵n*n看成是多个圈,一个圈,一个圈的。从外圈往里圈进行赋值,只要给每个圈的四条边顺时针赋值即可。注意的一点的是,当输入数字n为奇数时,最里面的是一个数字;当输入数字n为偶数时,最里面的是圈。


代码如下:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();	//矩阵大小
		int[][] arr = new int[n][n];
		int s = 1;	//初始值
		for(int i = 0; i < n/2; i++){	//第几圈,从外圈到内圈进行 顺时针赋值  
			for(int j = i; j <= n-i-1; j++){		//第一条边 从左到右赋值
				arr[i][j]=s++;
			}
			for(int k = i+1; k <= n-i-1; k++){		//第二条边 从上往下赋值
				arr[k][n-i-1]=s++;
			}
			for(int l = n-i-2;l>=i;l--){	//第三条边 从右往左赋值
				arr[n-i-1][l]=s++;
			}
			for(int m = n-i-2;m>=i+1;m--){	//第四条边 从下往上
				arr[m][i]=s++;
			}
		}
		
		//如果是奇数,中间有一个数
		if(n%2==1){
			arr[n/2][n/2]=s;
		}
		
		//输出
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				System.out.printf("%3d  ",arr[i][j]);
			}
			System.out.println();
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值