- class inVrileMatrix
- {
- private int n;
- inVrileMatrix(int n)
- {
- this.n = n;
- showMatrix();
- }
- public void showMatrix()
- {
- if(n%2==0)
- show1(n);
- else show2(n);
- }
- /*
- * show1 和show2 方法思路基本一致 每次确定是个坐标 下面的 Up* Low* Right* Left* 是 上下左右四个点 这四个点 一用就两个值
- * Up* 是左上 Low 是右下 Right 是右下 Left 是左下
- * 所以可以用两个值去替换这八个变量 不想去 去替换了 myeclipse 提供了替换工具 没空了
- * 每次给两行两列赋值
- *
- * 其中的四个for 循环还可以在次封装 好吧我承认我懒了 每次传递 四个参数就可以了
- *
- * 当我把 偶数 和 奇数的 矩阵打印出来的时候 猛然间发现 原来只要一个 show就可以了 在判断是否是偶数 在确实是否去翻转 不信你自己去试一试
- *
- */
-
- public static void show1(int n)
- {
- int[][] mat = new int[n][n];
- int[] max = new int[n];
- int t = n;
- for(int i=0;i<n;i++)
- {
- max[i] = t*t;
- t-=2;
- if(t<=0)break;
- }
-
- int Upx=0,Upy=0,Lowx=n-1,Lowy=n-1,Rightx=0,Righty=n-1,Leftx=n-1,Lefty=0;
- for(int i=0;i<n/2;i++)
- {
- if(i!=0)
- {
- Upx += 1; Upy += 1;
- Lowx -= 1; Lowy -= 1;
- Rightx += 1; Righty -= 1;
- Leftx -= 1; Lefty += 1;
- }
- mat[Leftx][Lefty] = max[i];
- for(int y=Lefty+1;y<=Lowy;y++)
- mat[Leftx][y] = mat[Leftx][y-1]-1;
- for(int x=Leftx-1;x>=Rightx;x--)
- mat[x][Righty] = mat[x+1][Righty]-1;
- for(int y=Righty-1;y>=Upy;y--)
- mat[Upx][y] = mat[Upx][y+1] -1;
- for(int x=Upx+1;x<Leftx;x++)
- mat[x][Upy] = mat[x-1][Upy] -1;
- }
- Print( n, mat);
- }
-
- public static void show2(int n)
- {
- int[][] mat = new int[n][n];
- int[] max = new int[n];
- int t = n;
- for(int i=0;i<n;i++)
- {
- max[i] = t*t;
- t-=2;
- if(t<=0)break;
- }
- int Rightx=0,Righty=n-1,Upx=0,Upy=0,Leftx=n-1,Lefty=0 ,Lowx=n-1,Lowy=n-1;
- mat[n/2][n/2]=1;
- for(int i=0;i<n/2;i++)
- {
- if(i!=0)
- {
- Upx += 1; Upy += 1;
- Lowx -= 1; Lowy -= 1;
- Rightx += 1; Righty -= 1;
- Leftx -= 1; Lefty += 1;
- }
- mat[Rightx][Righty] = max[i];
-
- for(int y=Righty-1;y>=Upy;y--)
- mat[Rightx][y] = mat[Rightx][y+1]-1;
-
- for(int x=Upx+1;x<=Leftx;x++)
- mat[x][Upy] = mat[x-1][Upy]-1;
- for(int y=Lefty+1;y<=Lowy;y++)
- mat[Leftx][y] = mat[Leftx][y-1]-1;
- for(int x=Lowx-1;x>Rightx;x--)
- mat[x][Lowy] = mat[x+1][Lowy]-1;
- }
- Print( n, mat);
- }
- /*
- * 就是用来打印数组的 玉圣用 * 来包围数组
- * 怎么实现的自己看代码了
- */
- public static void Print(int n,int[][] mat)
- {
- for(int i=0;i<n+2;i++)
- System.out.print("*\t");
- System.out.println();
- for(int h=0;h<n;h++)
- {
- System.out.print("*\t");
- for(int j=0;j<n;j++)
- System.out.print(mat[h][j]+"\t");
- System.out.println("*\t");
- }
- for(int i=0;i<n+2;i++)
- System.out.print("*\t");
- System.out.println();
- }
-
- }
- public class Main {
- public static void main(String[] args)
- {
- inVrileMatrix T = new inVrileMatrix(5);
- T = new inVrileMatrix(6);
- }
- }
复制代码 |