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

โปรแกรม Java สร้างพีระมิดและรูปแบบ (Pyramid and Pattern)

การสร้างพีระมิดตัวเลข (Number Pyramid Pattern) ใน Java

รูปแบบพีระมิดตัวเลขแสดงตัวเลขเพิ่มขึ้นถึงจุดกึ่งกลาง แล้วลดลง สมมาตรทั้งสองข้าง ใช้ Nested Loops ควบคุมช่องว่างและลำดับตัวเลข

อัลกอริทึม

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

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

import java.util.Scanner;

public class NumberPyramid {
    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 space = 1; space <= n - i; space++) {
                System.out.print(" ");
            }
            
            // ตัวเลขเพิ่ม: i, i+1, ..., 2*i-1
            for (int j = i; j <= 2 * i - 1; j++) {
                System.out.print(j + " ");
            }
            
            // ตัวเลขลด: 2*i-2, ..., i
            for (int j = 2 * i - 2; j >= i; j--) {
                System.out.print(j + " ");
            }
            
            System.out.println();
        }
    }
}

ตัวอย่างที่ 2: ค่าคงที่ (Hardcoded) - ตรงกับต้นฉบับ

public class NumberPyramid {
    public static void main(String[] args) {
        int n = 8;
        int k = 0, count = 0, temp = 0;
        
        System.out.println("จำนวนแถว: " + n);
        System.out.println("รูปแบบพีระมิด:");
        
        for (int i = 1; i <= n; i++) {
            for (int space = 1; space <= n - i; space++) {
                System.out.print(" ");
                count++;
            }
            
            while (k != 2 * i - 1) {
                if (count <= n - 1) {
                    System.out.print((i + k) + " ");
                    count++;
                } else {
                    temp++;
                    System.out.print((i + k - 2 * temp) + " ");
                }
                k++;
            }
            
            temp = count = k = 0;
            System.out.println();
        }
    }
}

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

รูปแบบพีระมิดตัวเลข:
    1 
   2 3 2 
  3 4 5 4 3 
 4 5 6 7 6 5 4 
5 6 7 8 9 8 7 6 5

การปรับปรุง: ใช้ StringBuilder และ Logic ชัดเจนกว่า (Java 11+)

public class NumberPyramidModern {
    public static void main(String[] args) {
        int n = 8;
        StringBuilder sb = new StringBuilder();
        
        for (int i = 1; i <= n; i++) {
            // ช่องว่างหน้า
            sb.append(" ".repeat(n - i));
            
            // ตัวเลขเพิ่ม
            for (int j = i; j <= 2 * i - 1; j++) {
                sb.append(j).append(" ");
            }
            
            // ตัวเลขลด
            for (int j = 2 * i - 2; j >= i; j--) {
                sb.append(j).append(" ");
            }
            
            sb.append("\n");
        }
        
        System.out.print(sb.toString());
    }
}

รูปแบบแปรผัน: Pascal's Triangle (พีระมิดปาสคาล)

public class PascalsTriangle {
    public static void main(String[] args) {
        int n = 6;
        
        for (int i = 0; i < n; i++) {
            System.out.print(" ".repeat(n - i - 1));
            
            int val = 1;
            for (int j = 0; j <= i; j++) {
                System.out.print(val + " ");
                val = val * (i - j) / (j + 1); // สูตรคอมบิเนชัน
            }
            System.out.println();
        }
    }
}

ผลลัพธ์ Pascal's Triangle (n=6)

     1 
    1 1 
   1 2 1 
  1 3 3 1 
 1 4 6 4 1 
1 5 10 10 5 1

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

  • Time: O(n²)
  • Space: O(1) เพิ่มเติม
  • รูปแบบต้นฉบับใช้ตัวแปร k, count, temp ค่อนข้างซับซ้อน วิธีแยก loop เพิ่ม/ลด เข้าใจง่ายกว่า