การพิมพ์รูปแบบดาวกลับ (Inverted Star Pattern) ใน Java
รูปแบบดาวกลับ (Inverted Pyramid) เริ่มจากฐานกว้างสุด แล้วลดจำนวนดาวลงทีละแถวจนเหลือ 1 ดาว ใช้ Nested Loops ควบคุมช่องว่างหน้าและจำนวนดาว
อัลกอริทึม
- รับขนาด
n(จำนวนแถว = จำนวนดาวแถวแรก) - ลูปแถว i = n ถึง 1 (ลดลง)
- พิมพ์ช่องว่างหน้า: n - i ช่อง
- พิมพ์ดาว: 2*i - 1 ดวง (Odd numbers: 2n-1, 2n-3, ..., 1)
- ขึ้นบรรทัดใหม่
ตัวอย่างที่ 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 ทุกแถว