黑马程序员——今天在黑马论坛看到有人问打印螺旋矩阵的题目

------- android培训java培训、期待与您交流! ----------


题目如下:

(拔高选做题,如果你把之前所有的知识都掌握了,可以思考一下这道题,本题不要求必须完成)
 输出 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 


我看到网上有C语言的解法,然后就用Java重新写了一下:

<span style="font-size:18px;">import java.util.Scanner;


public class TestLuoxuan {
	public static void fun(int[][] a,int n){
		int i,j,k = 0,m;
		if( n % 2 == 0 ){
			m = n / 2;
		}else {
			m = n/2 +1 ;
		}
		for(i = 0; i< m; i++){			
			for(j = i; j < n-i; j++){    // 产生 上部横行的数字,   01、02、03、04、05
				k++;                   
				a[i][j] = k;            
			}
			for(j = i+1; j < n-i; j++){  // 产生右部竖列的数字 ,6、7、8、9、10
				k++;
				a[j][n-i-1] = k;
			}
			for(j = n-i-2;j>=i;j--){	 // 产生下部横行的数字, 11、12、13、14、15
				k++;
				a[n-i-1][j] = k;
			}
			for(j=n-i-2; j>=i+1; j--){	 //产生左部 竖列 的数字, 16、17、18、19、20
				k++;
				a[j][i] = k;
			}
		}
	}
	
	public static void main(String[] args){
		int n, i, j;
		int[][] a = new int[100][100];
		System.out.println("\r请输入 n阶的大小,注意:n<10 ");
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		fun(a, n);
		
		System.out.println(n+"阶的螺旋方阵如下:");
		for(i = 0; i < n; i++){
			for(j = 0; j< n; j++){
				if(a[i][j]<10){
					System.out.print("0"+a[i][j]+" ");  // 在个位数的前面加个0,以便于排列美观
				}else{
					System.out.print(a[i][j]+" ");					
				}
			}
			System.out.println();
		}
		System.out.println();
	}
}</span>


输出结果是:

<span style="font-size:18px;">请输入 n阶的大小,注意:n<10 
5
5阶的螺旋方阵如下:
01 02 03 04 05 
16 17 18 19 06 
15 24 25 20 07 
14 23 22 21 08 
13 12 11 10 09 </span>


这道题主要考察的是二位数组的运用~ 

<span style="font-size:18px;">for(j = i; j < n-i; j++){    // 产生 上部横行的数字,   01、02、03、04、05
				k++;                   
				a[i][j] = k;            
			}</span>

如果单单打印上面这段for循环,输出结果为:

01、02、03、04、05

        06、07、08

                09


这就是整个图形中的一块,再根据这个思路,把其它四边都写出来就OK了~ 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值