โจทย์: รับ 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