输出回形矩阵——Java版
题目:
给定一个N*N的整型二维数组,要求以(0,0)为起点,由外层向内层,按顺时针方向依次输出全部元素,如下数组的输出应为1,2,3,6,9,8,7,4,5.
解题思路:
-
本质问题是画矩形线问题。
第一圈:
-
画上线的时候,y不变,x逐次加一 画右线的时候,x不变,y逐次加一 画下线的时候,y不变,x逐次减一 画左线的时候,x不变,y逐次减一
第二圈:
-
画上线的时候,y+1不变,x+1逐次加一 画右线的时候,x+1不变,y+1逐次加一 画下线的时候,y+1不变,x+1逐次减一 画左线的时候,x+1不变,y+1逐次减一
......
出现这种规律的时候,可以联想到多次for循坏,此处只需两次。最外层决定圈数,内层决定线,好了,话不多说,上代码~~~~~~~
代码:
package RegressionMatrix; import java.util.Scanner; /** * 回形矩阵的绘制 */ public class Test { public static void main(String[] args) { Scanner scanner = new Scanner (System.in); System.out.println ("请输入你的行数与列数:"); int i = scanner.nextInt (); printN(i); } private static void printN(int n) { int[][] arr = new int[n][n]; int count = 1; //i代表圈数 for (int i = 0; i < n / 2; i++) { //绘制第一条线(上) for (int j = i,k =i; k <n-i-1 ; k++) { arr[j][k] = count++; } //绘制第二条线(右) for (int j = i,k =n-i-1 ; j <n-i-1 ; j++) { arr[j][k] = count++; } //绘制第三条线(下) for (int j =n-i-1 ,k=n-i-1; k> i ; k--) { arr[j][k] = count++; } //绘制第四条线(左) for (int j = n-i-1,k=i; j >i ; j--) { arr[j][k] = count++; } } //如果是奇数,则中间的填充 if(n%2 == 1){ arr[n/2][n/2]=count; } //遍历 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print (arr[i][j] + " "); } System.out.println (); } } }
上一篇:
Java基础知识总结(2021版)