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

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

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

รูปสามเหลี่ยมกระจกด้านบน (Right-aligned Triangle): ดาวชิดขวา แถวบนเยอะที่สุด แถวล่างน้อยที่สุด ใช้ Nested Loops ควบคุมช่องว่างหน้าและดาว

อัลกอริทึม

  1. รับจำนวนแถว n
  2. ลูปแถว i = n ถึง 1 (ลดลง)
  3. ช่องว่างหน้า: n - i ช่อง
  4. ดาว: i ดวง
  5. ขึ้นบรรทัดใหม่

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

import java.util.Scanner;

public class MirrorUpperTriangle {
    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 = n; i >= 1; i--) {
            // ช่องว่างหน้า
            for (int j = n; j > i; j--) {
                System.out.print(" ");
            }
            // ดาว
            for (int k = 1; k <= i; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

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

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

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

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

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

public class MirrorUpperModern {
    public static void main(String[] args) {
        int n = 8;
        StringBuilder sb = new StringBuilder();
        
        for (int i = n; i >= 1; i--) {
            sb.append(" ".repeat(n - i));
            sb.append("*".repeat(i));
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

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

public class MirrorUpperSpaced {
    public static void main(String[] args) {
        int n = 5;
        
        for (int i = n; i >= 1; i--) {
            System.out.print(" ".repeat(n - i));
            System.out.println("* ".repeat(i).trim());
        }
    }
}

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

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

ความสัมพันธ์กับรูปแบบอื่นๆ

รูปแบบ คำอธิบาย ความสัมพันธ์
Upper Triangle ดาวชิดซ้าย เพิ่มขึ้น Mirror ของนี้ (flip horizontal)
Downward Triangle ดาวชิดขวา ลดลง เหมือนกัน (แค่ชื่อต่าง)
Mirror Lower ดาวชิดขวา เพิ่มขึ้น แล้วลด Mirror Upper + Mirror Lower = Mirror Lower Full

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

  • Time: O(n²)
  • Space: O(1) เพิ่มเติม
  • ลูป i = n ถึง 1 (descending) เป็นจุดสำคัญ
  • ช่องว่าง = n - i, ดาว = i