-------
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了~