การพิมพ์รูปแบบดาว X (X Star Pattern) ใน Java
รูปแบบ X ประกอบด้วยเส้นทแยงมุมสองเส้นที่ตัดกัน ใช้ Nested Loops ควบคุมการพิมพ์ดาว (*) และช่องว่าง
อัลกอริทึม
- รับขนาด
n(จำนวนแถว/คอลัมน์ของครึ่งหนึ่ง) - ขนาดรูปเต็ม =
2n - 1(จำนวนแถวและคอลัมน์) - ลูปแถว i = 1 ถึง 2n-1
- ลูปคอลัมน์ j = 1 ถึง 2n-1
- พิมพ์ 'X' ถ้า
j == i(เส้นทแยงหลัก) หรือj == 2n - i(เส้นทแยงรอง) - พิมพ์ช่องว่างกรณีอื่น
ตัวอย่างที่ 1: รับค่าจากผู้ใช้ (Scanner)
import java.util.Scanner;
public class XStarPattern {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("ป้อนขนาด: ");
int n = scanner.nextInt();
System.out.println("รูปแบบ X Star Pattern:");
int size = 2 * n - 1;
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
if (j == i || j == size - i + 1) {
System.out.print("X");
} else {
System.out.print(" ");
}
}
System.out.println(); // ขึ้นบรรทัดใหม่
}
}
}
ตัวอย่างที่ 2: ค่าคงที่ (Hardcoded)
public class XStarPattern {
public static void main(String[] args) {
int n = 8;
System.out.println("ขนาด: " + n);
System.out.println("รูปแบบ X Star Pattern:");
int size = 2 * n - 1;
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
if (j == i || j == size - i + 1) {
System.out.print("X");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
ผลลัพธ์ (n=4)
รูปแบบ X Star Pattern:
X X
X X
X X
XX
X X
X X
X X
การปรับปรุง: ใช้ StringBuilder (ประสิทธิภาพดีกว่า)
public class XStarPatternOptimized {
public static void main(String[] args) {
int n = 8;
int size = 2 * n - 1;
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size; j++) {
sb.append((j == i || j == size - i + 1) ? "X" : " ");
}
sb.append("\n");
}
System.out.print(sb.toString());
}
}
รูปแบบแปรผัน: ใช้ดาว (*) แทน X
// เปลี่ยน "X" เป็น "*" ในโค้ดด้านบน
// ผลลัพธ์จะเป็นดาวแทนตัวอักษร X
การวิเคราะห์ความซับซ้อน
- Time: O(n²) - nested loops
- Space: O(1) เพิ่มเติม (หรือ O(n²) ถ้าเก็บใน StringBuilder)
- เหมาะสำหรับการฝึกฝน Loop และ Logic การพิมพ์รูปแบบ
ข้อสังเกต
- ดัชนีเริ่มที่ 1 เพื่อให้คณิตศาสตร์ง่ายขึ้น (i, j เริ่มที่ 1)
- เงื่อนไข
j == size - i + 1คือเส้นทแยงมุมจากขวาบนไปซ้ายล่าง - จุดกึ่งกลาง (i == j == n) จะพิมพ์เพียงครั้งเดียว (เงื่อนไข OR)