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

โปรแกรม Java พิมพ์ Square Pattern จากตัวเลขที่รับเข้ามา

โจทย์: รับ n แล้วพิมพ์ pattern n×n แบบพิเศษ

ตัวอย่างโค้ด (ปรับปรุงให้อ่านง่าย)


import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter size n: ");
        int n = sc.nextInt();
        
        // สร้าง matrix 1..n²
        int[][] matrix = new int[n][n];
        int val = 1;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = val++;
            }
        }
        
        // พิมพ์ครึ่งบน (แถวคู่: 0, 2, 4...)
        for (int i = 0; i < n; i += 2) {
            printRow(matrix[i]);
        }
        
        // พิมพ์ครึ่งล่าง (แถวคี่จากท้าย: ..., 5, 3, 1)
        int start = (n % 2 == 0) ? n - 1 : n - 2;
        for (int i = start; i >= 0; i -= 2) {
            printRow(matrix[i]);
        }
    }
    
    static void printRow(int[] row) {
        for (int v : row) {
            System.out.printf("%3d", v);
        }
        System.out.println();
    }
}

ตัวอย่าง Input/Output (n=5)

Enter size n: 5
  1  2  3  4  5
 11 12 13 14 15
 21 22 23 24 25
 16 17 18 19 20
  6  7  8  9 10

รูปแบบ: แถว 0, 2, 4... (บนลงล่าง) แล้วตามด้วยแถวคี่จากท้ายสุดขึ้นมา

Complexity

  • Time: O(n²) - สร้าง matrix + พิมพ์
  • Space: O(n²) - เก็บ matrix (สามารถลดเป็น O(1) คำนวณค่า on-the-fly ได้)

Optimization: ไม่ต้องเก็บ Matrix


// คำนวณค่าใน cell (r, c) ได้เลย: r * n + c + 1
// ไม่ต้อง allocate matrix