Java編程題庫 | 打印菱形圖案

 問題描述:

  1 2 3 4 5 6 7 8 9 10 11
1           *          
2         *   *        
3       *   *   *      
4     *   *   *   *    
5   *   *   *   *   *  
6 *   *   *   *   *   *
7   *   *   *   *   *  
8     *   *   *   *    
9       *   *   *      
10         *   *        
11           *          

 

問題分析:

菱形的組成:空格+星號,可以看做是上下兩個三角形組成。

星號最多的一行是中間的一行maxNum:(11+1)/2=6,也就是第6行。

上三角:第一行到第六行

空格與行號的關係:

每一行最左邊起空格數量=maxNum-當前行號,如第8行有2個空格:8-6=2個。

星號與行號的關係:

每一行最左邊起星號的數量=當前行號,如第2行有2個星號。

下三角:

思路一:第七行到第十一行

思路二:相當於第五行到第一行

空格與行號的關係:

每一行最左邊起空格數量=當前行號-maxNum,如第3行有3個空格:6-3=3個。

星號與行號的關係:

每一行最左邊起星號的數量=當前行號-2*空格數,如第10行有2個星號:10-2*(10-6)=2個。

完整代碼:

/*
 * @Description: 
 * @version: 
 * @Author: Zero
 * @LastEditors: Zero
 * @LastEditTime: 2020-04-11 16:39:28
 */

public class HomeWork {
    public static void main(String args[]) {
        HomeWork hw = new HomeWork();
        hw.test();
    }

    public void test() {

        int row = 11;// 行數,奇數

        int maxNum = (row + 1) / 2; // 內容最多的一行的行數6

        // 正三角
        for (int i = 1; i <= maxNum; i++) {// 從第一行到最大行
            // 空格
            for (int j = 1; j <= maxNum - i; j++) {
                System.out.print(" ");
            }
            // 內容
            for (int k = 1; k <= i; k++) {
                System.out.print("*");
                System.out.print(" ");
            }
            // 換行
            System.out.println();
        }

        // 下三角思路一:第七行到第十一行
        for (int i = maxNum + 1; i < row + 1; i++) {
            // 空格
            for (int j = 1; j <= i - maxNum; j++) {
                System.out.print(" ");
            }
            // 星號
            for (int j = 0; j < i - 2 * (i - maxNum); j++) {
                System.out.print("*");
                System.out.print(" ");
            }
            System.out.println();
        }

        // 下三角思路二:第五行到第一行
        // for (int i = row - maxNum; i > 0; i--) {
        // // 空格
        // for (int j = 1; j <= maxNum - i; j++) {
        // System.out.print(" ");
        // }
        // // 內容
        // for (int k = 1; k <= i; k++) {
        // System.out.print("*");
        // System.out.print(" ");
        // }
        // // 換行
        // System.out.println();
        // }

    }
}

打印結果:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章