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

โปรแกรม Java พิมพ์รูปดาวกลับ (Inverted Star Pattern)

การพิมพ์รูปแบบดาวกลับ (Inverted Star Pattern) ใน Java

รูปแบบดาวกลับ (Inverted Pyramid) เริ่มจากฐานกว้างสุด แล้วลดจำนวนดาวลงทีละแถวจนเหลือ 1 ดาว ใช้ Nested Loops ควบคุมช่องว่างหน้าและจำนวนดาว

อัลกอริทึม

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

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

import java.util.Scanner;

public class InvertedStarPattern {
    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 = 0; j < n - i; j++) {
                System.out.print(" ");
            }
            // ดาว (เลขคี่: 2*i - 1)
            for (int k = 0; k < 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

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

public class InvertedStarPattern {
    public static void main(String[] args) {
        int n = 8;
        System.out.println("ขนาด: " + n);
        System.out.println("รูปแบบดาวกลับ:");
        
        for (int i = n; i >= 1; i--) {
            for (int j = 0; j < n - i; j++) {
                System.out.print(" ");
            }
            for (int k = 0; k < 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

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

รูปแบบดาวกลับ:
*********
 *******
  *****
   ***
    *

การปรับปรุง: ใช้ StringBuilder และ String.repeat() (Java 11+)

public class InvertedStarModern {
    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(2 * i - 1));
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: Inverted Half Pyramid (ครึ่งพีระมิดกลับ)

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

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

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

รูปแบบแปรผัน: Inverted Pyramid with Numbers

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

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

1 2 3 4 5 
 1 2 3 4 
  1 2 3 
   1 2 
    1

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

  • Time: O(n²) - nested loops
  • Space: O(1) เพิ่มเติม
  • สูตรดาว: 2*i - 1 ให้ลำดับเลขคี่
  • ช่องว่างหน้า: n - i เพิ่มขึ้นทีละ 1 ทุกแถว