คำอธิบายปัญหา
สลับองค์ประกอบเส้นทแยงมุมหลัก (Main Diagonal) กับเส้นทแยงมุมรอง (Secondary Diagonal) ในเมทริกซ์สี่เหลี่ยมจัตุรัส (Square Matrix) ถ้าไม่ใช่ Square Matrix ให้แจ้งเตือน
ตรรกะการสลับ
for (i = 0; i < m; i++) {
a = ma[i][i];
ma[i][i] = ma[i][m-i-1];
ma[i][m-i-1] = a;
}
โค้ดตัวอย่าง
#include <stdio.h>
main() {
int i, j, m, n, a;
static int ma[10][10];
printf("Order m x n: "); scanf("%dx%d", &m, &n);
if (m == n) {
printf("Elements:\n");
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &ma[i][j]);
printf("Original:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) printf(" %d", ma[i][j]);
printf("\n");
}
// สลับเส้นทแยง
for (i = 0; i < m; i++) {
a = ma[i][i];
ma[i][i] = ma[i][m-i-1];
ma[i][m-i-1] = a;
}
printf("After swap diagonals:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) printf(" %d", ma[i][j]);
printf("\n");
}
} else {
printf("Not a square matrix\n");
}
}
ผลลัพธ์
Run 1: 3x3 matrix 1 2 3 4 5 6 7 8 9 → After swap: 3 2 1 4 5 6 9 8 7 Run 2: 4x3 matrix → Not a square matrix