输出案例:
1 | 1 | 1 |
1 | 2 | 1 |
1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 |
1 | 2 | 2 | 2 | 2 | 1 |
1 | 2 | 3 | 3 | 2 | 1 |
1 | 2 | 3 | 3 | 2 | 1 |
1 | 2 | 2 | 2 | 2 | 1 |
1 | 1 | 1 | 1 | 1 | 1 |
思路:从最里面一层开始,先给最里面一层赋值,然后边界向外延伸依次给外层赋值,直到赋完整个方阵。
根据方阵规律:n阶方阵有(n+1)/2个“回”,即最里面一层的值应该为(n+1)/2
最里面一层的边界:上(左)边界为(n-1)/2;下(右)边界为n/2.
代码如下:
import java.util.Scanner;
public class matrix_work {
public static void main(String[] args) {
System.out.print("请输入方阵的阶数:");
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//接受数据,方阵的阶数
int w=(n-1)/2,a=(n-1)/2,s=n/2,d=n/2;//定义方阵的四个边界,边界从方阵中心向外延伸
int[][] re=new int[n][n];//将方阵定义为一个数组
int x=0,y=0;//x,y分别对应方阵的行,列
int q=(n+1)/2;//代表每一个回的值,最开始代表最里面一圈的值
while (q>0) {
//先给最里面的回赋值
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
//找到最里面的回
if(i==w||i==s||j==a||j==d){
re[i][j]=q;//赋值
}
}
}
q--;//最里面回的值赋完了q-1用来赋外面回的值
//以下代表边界向外延伸一圈
w--;
a--;
s++;
d++;
}
//打印出方阵
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(re[i][j]+"\t");
}
System.out.println();
}
}
}