首页 > 用java循环实现数字菱形

用java循环实现数字菱形

请用循环控制编写程序,输出如下图格式图形(数字菱形)

下方所示
              1
           1  2  1
        1  2  3  2  1
     1  2  3  4  3  2  1
  1  2  3  4  5  4  3  2  1
     1  2  3  4  3  2  1
        1  2  3  2  1
           1  2  1
              1

public class Demo {
    public static void main(String []args) {

        int max = 5;

        for (int i = 1; i < max * 2; i ++) {
            if (i <= max) {
                for (int j = 1; j < i * 2; j ++) {
                    if (j <= i) {
                        System.out.print(j);
                    }   
                    else {
                        System.out.print(i - j + i); 
                    }   
                }   
            }   
            else {
                int tmp = (max + max - i );
                for (int j = 1; j < tmp * 2; j ++) {
                    if (j <= tmp) {
                        System.out.print(j);
                    }   
                    else {
                        System.out.print(tmp - j + tmp);
                    }   
                }   
            }   
            System.out.println();
        }   

    }   
}

package main

import ( 
    "fmt"
)

func main() {
    max := 9 
    op := 1
    i := 1
    for i > 0{
        for j := 1; j <= max * 2; j++ {
            if (j < max - i + 1) {
                fmt.Print("  ")
            } else if (j >= max - i + 1 && j <= max) {
                fmt.Print(j + i - max, " ")
            } else if (j > max && j < max + i) {
                fmt.Print(i - j + max, " ")
            }
        }
        fmt.Println()
        i += op;
        if i == max {
            op = -1
        }
    }
}

不会写java,用go语言写了个循环


看到这种题目,第一个想法还是递归.

public static void p_3(int n){
        p_3_0(1,n);
    }
    private static void p_3_0(int i ,int n){
        if(i==n){p_3_1(i,n);return;}
        p_3_1(i,n);
        p_3_0(i+1,n);
        p_3_1(i,n);
    }
    private static void p_3_1(int i,int n){
        p_3_2(n-i);
        p_3_3(1,i);
        System.out.println();
    }
    private static void p_3_2(int n){
        System.out.print(' ');
        if(n>0)p_3_2(n-1);
    }
    private static void p_3_3(int i,int n){
        if(n==i){System.out.print(i);return;}
        System.out.print(i);
        p_3_3(i+1,n);
        System.out.print(i);
    }

如果搞个额外空间来保存位置的话,代码可以漂亮点,DFS,BFS之类的.

public static void p_2(int n){
        int [][] d = new int[2*n-1][2*n-1];
        p_2_0(n, n-1, n-1, d);
        print(d);
    }
    private static void p_2_0(int n , int x ,int y,int [][]d){
        if(d[x][y]<n)d[x][y]=n;
        if(n>1){p_2_0(n-1,x-1,y,d);p_2_0(n-1,x,y-1,d);p_2_0(n-1,x+1,y,d);p_2_0(n-1,x,y+1,d);}        
    }
    private static void print(int [][]d){
        for(int i=0;i<d.length;i++){
            for(int j =0 ;j<d[0].length;j++){
                System.out.print(d[j][i]==0?" ":d[j][i]);
            }
            System.out.println();
        }
    }

改成循环也不错,还符合OP要求.

public static void p_1(int n){
        int [][] d = new int[2*n-1][2*n-1];
        int x=n-1,y=n-1;
        for(int i =0 ;i<n;i++){
            for(int j = 0 ; j<=i;j++){
                d[x+j][y+(i-j)]=(n-i);
                d[x+-1*j][y+-1*(i-j)]=(n-i);
                d[x+-1*j][y+(i-j)]=(n-i);
                d[x+j][y+-1*(i-j)]=(n-i);
            }
        }
        print(d);
    }

期待漂亮的递归写法.

【热门文章】
【热门文章】