需求
- 輸入 4×4 整數矩陣。
- 輸出最大值、最小值及其行列索引(0-based)。
- 計算主對角線(i==j)與副對角線(i+j==3)元素之和(重疊中心點只加一次)。
完整代碼
#include
int main(void) {
int a[4][4];
for (int i = 0; i < 4; ++i)
for (int j = 0; j < 4; ++j)
scanf("%d", &a[i][j]);
int max = a[0][0], min = a[0][0];
int max_r = 0, max_c = 0, min_r = 0, min_c = 0;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
if (a[i][j] > max) { max = a[i][j]; max_r = i; max_c = j; }
if (a[i][j] < min) { min = a[i][j]; min_r = i; min_c = j; }
}
}
int sum = 0;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
if (i == j || i + j == 3) sum += a[i][j];
}
}
printf("max = %d at (%d,%d)\n", max, max_r, max_c);
printf("min = %d at (%d,%d)\n", min, min_r, min_c);
printf("diagonal sum = %d\n", sum);
return 0;
}
關鍵點提示
- 初始化 max/min 為
a[0][0],避免未初始化比較。
- 座標記錄同步更新。
- 對角線條件
i==j || i+j==n-1 適用任意 N×N 方陣。
- 若中心元素屬於兩條對角線(N 為奇數),只加一次,符合數學定義。
測試樣例
輸入:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
輸出:
max = 16 at (3,3)
min = 1 at (0,0)
diagonal sum = 68 # (1+6+11+16) + (4+7+10+13) = 34+34=68