正式提交
-
1.
-
2.
-
3.
-
说明
-
t为最大数
-
num为正方形边长
-
y为行数
-
-
分析
-
y1<=y2
-
t=(num+1)/2;
-
y1=1 y2=num-1
-
1的个数 num
-
-
y1=2 y2=num-2
-
1的个数 2
-
2的个数 num-2
-
-
y1=3 y2=num-3
-
1的个数 2
-
2的个数 2
-
3的个数 num-2-2/赋值完当y1个不同的数后剩下的全为
......
-
-
直到y1=y2时特殊操作
-
当num是奇数123454321,即为每一步的赋值操作
-
当num是偶数不进行任何操作
-
-
-
/* * t=(num+1)/2; t为最中间的单个数或者多个数 * if(num%2==0)//如果是偶数个 * 为全环 * if(num%2==1)//如果是奇数个 * 为环中带点 * 0 num-0 * 11 12 13 14 * 21 22 23 24 * 31 32 33 34 * 41 42 43 44 * x的优先级大 y的优先级小 * * */ import java.util.Scanner; public class Main753 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); /* * t矩阵最中间的数据/矩阵中赋入的最大值/中间到边的距离 * num 矩阵的宽度 * 矩阵赋的值i----->t<------i * i 初始值/当前操作的第几个数据 * y 操作的列数,x 操作的行数 * t 赋值初始化用 * n 当前行中值不为y的个数 * int o=1; 常量固定的开始 * */ int t,i=1; int y1,y2; int x1,x2; int num; do { num = sc.nextInt(); if (num == 0) break; else if (num == 1) { System.out.println(1); System.out.println(); } else { int nums[][] = new int[num][num]; t = (num + 1) / 2; y1 = 0; y2 = num - 1; int n=0; while (y1 <= y2) { x1 = 0; x2 = num - 1; i = 1; while (n != 0) { nums[y1][x1] = i; nums[y1][x2] = i; nums[y2][x1++] = i; nums[y2][x2--] = i++; n--; } for (int j = x1; j <= x2; j++) { nums[y1][j] = i; nums[y2][j] = i; } y1++; y2--; n = y1; } for (int j = 0; j < num; j++) { for (int k = 0; k < num; k++) { System.out.print(nums[j][k]+" "); } System.out.println(); } System.out.println(); } }while (num != 0) ; } }