การพิมพ์รูปสามเหลี่ยมดาวกระจกด้านล่าง (Mirror Lower Star Triangle) ใน Java
รูปสามเหลี่ยมกระจกด้านล่าง: ดาวชิดขวา แถวบนเยอะ แถวล่างน้อย แล้วกระจกกลับมาขึ้น (สymmetric vertically)
อัลกอริทึม
- รับจำนวนแถว
n - ส่วนบน: ลูป i = 1 ถึง n, ช่องว่าง i-1, ดาว n-i+1
- ส่วนล่าง: ลูป 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)