โจทย์
สร้างเมทริกซ์ n×n แล้วเติมตัวเลข 1 ถึง n² ในรูปแบบ Diagonal (ทแยงมุม) แล้วพิมพ์เมทริกซ์
ตัวอย่าง
n = 3: 1 2 4 3 5 7 6 8 9 n = 4: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16
สังเกตรูปแบบ
เติมตามแนวทแยงมุม (diagonal) จากมุมซ้ายบน:
- Upper triangle: เริ่มแถว 0 คอลัมน์ i (i=0..n-1) เดินลงซ้าย (row++, col--) จน col=0
- Lower triangle: เริ่มแถว k คอลัมน์ n-1 (k=1..n-1) เดินลงซ้าย (row++, col--) จน col=k
อัลกอริทึม
- สร้างเมทริกซ์ mat[n][n], ตัวนับ d = 1
- Upper triangle: for i=0..n-1, j=i..0, k=0..i: mat[k][j] = d++
- Lower triangle: for k=1..n-1, i=k..n-1, j=n-1..k: mat[i][j] = d++
- พิมพ์เมทริกซ์ mat
โค้ดภาษา C
#include <stdio.h>
int printdiagonal(int n) {
int mat[n][n], i, j, k, d = 1, m;
// Upper triangle diagonals
for (i = 0; i < n; i++) {
j = i; k = 0;
for (j = i; j >= 0; j--) {
mat[k][j] = d;
d++; k++;
}
}
// Lower triangle diagonals
for (k = 1; k < n; k++) {
i = m = k;
for (j = n - 1; j >= m; j--) {
mat[i][j] = d;
d++; i++;
}
}
// Print matrix
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
printf("%d ", mat[i][j]);
printf("\n");
}
return 0;
}
int main() {
int n = 3;
printdiagonal(n);
return 0;
}ผลลัพธ์
1 2 4 3 5 7 6 8 9