本帖最后由 JuncaiLiao 于 2012-02-09 11:20:52 编辑

解决方案 »

  1.   

    中間數是n+1
    然後縱或橫走出去,每一步減一,減到一為止用二維數組 每個點x,y 數值 v, 中心點(X,Y)
    v=n+1-abs(X-x)-abs(Y-x)
    if v<1 v=1自己試試看吧。
      

  2.   

    public class Test1{
    public static void main(String[] args){
    printRect(3);
    }

    static void printRect(int n){
    int size = n * 2 + 1;
    int[][] arrays = new int[size][size];
    //获取上半部分
    for(int i = 0;i < size;i++){
    for(int j = 0;j <= size / 2;j++){
    if(i <= size / 2){
    if(i + j > n){
    //横纵下标之和大于n元素的值为“下标之和 - 数组长度的一半 + 1“
    arrays[i][j] = arrays[i][size - j - 1] = i + j - size / 2  + 1;//左右对称
    }
    else
    arrays[i][j] = arrays[i][size - j - 1] = 1;
    }
    }
    }
    //翻转获取下半部分,上下对称
    for(int i = size / 2;i < size;i++){
    for(int j = 0;j < size;j++){
    arrays[i][j] = arrays[size - i - 1][j];
    }
    }
    //输出
    for(int i = 0;i < size;i++){
    for(int j = 0;j < size;j++){
    System.out.print(arrays[i][j] + " ");
    }
    System.out.println();
    }
    }
    }