输出回型矩阵如下所示 1 2 3 1 2 3 4 1 2 3 4 5 8 9 4 12 13 14 5 16 17 18 19 6 7 6 5 11 16 15 6 15 24 25 20 7 10 9 8 7 14 23 22 21 8 13 12 11 10 9
思路
行列两层循环,再加上圈数循环,最外一圈为第一层循环,由圈数从外到内遍历
第1行、第m列、第m行、第1列;第2行、第m-1列、第m-1行、第2列;. . .
按圈数为结束条件
m为奇数,圈数:m/2+1 (0.5进一)
m为偶数,圈数:m/2
细分思路1:控制数的规律
但其实控制数的规律很难,因为不仅行列的数的规律不同,同时行数不同之间的数规律相同、始末的值不同,找到规律需要大量的数据,并且规律不易发现
细分思路2:给一个num让它过一个数就自增
代码及解析
import java.util.Scanner;
public class Hui {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
int m = scan.nextInt();
int[][] arr = new int[m][m];
Hui h = new Hui();
//System.out.println("----------------");
h.sortHuiWen(arr,m);
//System.out.println("----------------");
for(int i = 0;i < arr.length;i++){
for(int j = 0;j < arr[i].length;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
scan.close();
}
public void sortHuiWen(int arr1[][], int n){
int nums = 1;
//放在for循环之内的第三层语句是等循环内语句执行完毕后再一次进行累加,所以上行的for循环能够遍历到arr1[0][0],但是给它赋的值仍是nums的初值
//按圈数循环,从arr1[0][0],arr[1][1]...开始循环
for(int i = 0;i < arr1.length/2;i++){
//上行
for(int a = i;a < arr1.length - i - 1;a++,nums++){
arr1[i][a] = nums;
}
//右列
for(int b = i;b < arr1.length - i - 1;b++,nums++){
arr1[b][arr1.length - i - 1] = nums;
}
//下行,从右往左赋值
for(int c = arr1.length - i - 1;c > i;c--,nums++){
arr1[arr1.length - i - 1][c] = nums;
}
//左列,从下往上赋值
for(int d = arr1.length - i - 1;d > i;d--,nums++){
arr1[d][i] = nums;
}
}
if(n % 2 == 1){ //n为奇数时圈数多一层
arr1[arr1.length/2][arr1.length/2] = n*n;
}
}
}