关于螺旋矩阵的问题
题目如下:
(拔高选做题,如果你把之前所有的知识都掌握了,可以思考一下这道题,本题不要求必须完成)
输出 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重新写了一下:
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>
输出结果是:
请输入 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
这道题主要考察的是二位数组的运用~
for(j = i; j < n-i; j++){ // 产生 上部横行的数字, 01、02、03、04、05 k++; a[i][j] = k; }
如果单单打印上面这段for循环,输出结果为:
01、02、03、04、05
06、07、08
09
这就是整个图形中的一块,再根据这个思路,把其它四边都写出来就OK了~
作 者:蒋至乙 出 处:http://www.cnblogs.com/jackchiang 文章内容欢迎转载,但请保留此段声明,并在页面醒目位置给出原文连接,感谢您的支持。 人生在世的全部意义,不是为了享受,而是为了帮助别人脱离苦难、获得幸福~