Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java พิมพ์รูปสามเหลี่ยมดาวกระจกด้านล่าง (Mirror Lower Star Triangle)

การพิมพ์รูปสามเหลี่ยมดาวกระจกด้านล่าง (Mirror Lower Star Triangle) ใน Java

รูปสามเหลี่ยมกระจกด้านล่าง: ดาวชิดขวา แถวบนเยอะ แถวล่างน้อย แล้วกระจกกลับมาขึ้น (สymmetric vertically)

อัลกอริทึม

  1. รับจำนวนแถว n
  2. ส่วนบน: ลูป i = 1 ถึง n, ช่องว่าง i-1, ดาว n-i+1
  3. ส่วนล่าง: ลูป i = n-1 ถึง 0, ช่องว่าง i, ดาว n-i

ตัวอย่างที่ 1: รับค่าจากผู้ใช้ (Scanner)

import java.util.Scanner;

public class MirrorLowerTriangle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("ป้อนจำนวนแถว: ");
        int n = scanner.nextInt();
        
        System.out.println("รูปสามเหลี่ยมกระจกด้านล่าง:");
        
        // ส่วนบน
        for (int i = 1; i <= n; i++) {
            // ช่องว่างหน้า
            for (int j = 1; j < i; j++) {
                System.out.print(" ");
            }
            // ดาว
            for (int j = i; j <= n; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
        
        // ส่วนล่าง (กระจก)
        for (int i = n - 1; i >= 0; i--) {
            for (int j = 0; j < i; j++) {
                System.out.print(" ");
            }
            for (int j = i; j <= n - 1; j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

ตัวอย่างที่ 2: ค่าคงที่ (Hardcoded)

public class MirrorLowerTriangle {
    public static void main(String[] args) {
        int n = 8;
        System.out.println("จำนวนแถว: " + n);
        System.out.println("รูปสามเหลี่ยมกระจกด้านล่าง:");
        
        // ส่วนบน
        for (int i = 1; i <= n; i++) {
            System.out.print(" ".repeat(i - 1));
            System.out.println("* ".repeat(n - i + 1));
        }
        
        // ส่วนล่าง
        for (int i = n - 1; i >= 0; i--) {
            System.out.print(" ".repeat(i));
            System.out.println("* ".repeat(n - i));
        }
    }
}

ผลลัพธ์ (n=5)

รูปสามเหลี่ยมกระจกด้านล่าง:
* * * * * 
 * * * * 
  * * * 
   * * 
    * 
    * 
   * * 
  * * * 
 * * * * 
* * * * *

การปรับปรุง: ใช้ StringBuilder (Java 11+)

public class MirrorLowerModern {
    public static void main(String[] args) {
        int n = 8;
        StringBuilder sb = new StringBuilder();
        
        // ส่วนบน
        for (int i = 1; i <= n; i++) {
            sb.append(" ".repeat(i - 1));
            sb.append("* ".repeat(n - i + 1));
            sb.append("\n");
        }
        
        // ส่วนล่าง
        for (int i = n - 1; i >= 0; i--) {
            sb.append(" ".repeat(i));
            sb.append("* ".repeat(n - i));
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: Mirror Lower Triangle (ไม่มีช่องว่างระหว่างดาว)

public class MirrorLowerSolid {
    public static void main(String[] args) {
        int n = 5;
        
        // ส่วนบน
        for (int i = 1; i <= n; i++) {
            System.out.print(" ".repeat(i - 1));
            System.out.println("*".repeat(n - i + 1));
        }
        
        // ส่วนล่าง
        for (int i = n - 1; i >= 1; i--) {
            System.out.print(" ".repeat(i));
            System.out.println("*".repeat(n - i + 1));
        }
    }
}

ผลลัพธ์ Solid (n=5)

*****
 ****
  ***
   **
    *
    *
   **
  ***
 ****
*****

การวิเคราะห์

  • Time: O(n²)
  • Space: O(1) เพิ่มเติม
  • ส่วนบน: ช่องว่างเพิ่ม, ดาวลด
  • ส่วนล่าง: ช่องว่างลด, ดาวเพิ่ม (กระจก)
  • แถวกึ่งกลางซ้ำ 2 ครั้ง (n และ n-1)