給定n×m矩陣,找出絕對值最大的元素,輸出其行號、列號(1-based)及原始值。多組測試至EOF。
int main() {
int n, m, a[101][101];
while (scanf("%d %d", &n, &m) == 2) {
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
scanf("%d", &a[i][j]);
int max_val = a[0][0], max_r = 0, max_c = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
if (abs(a[i][j]) > abs(max_val)) { // 關鍵:比較絕對值
max_val = a[i][j];
max_r = i; max_c = j;
}
printf("%d %d %d\n", max_r+1, max_c+1, max_val);
}
return 0;
}
abs vs fabs| 函數 | 頭文件 | 參數類型 | 返回類型 | 適用場景 |
|---|---|---|---|---|
abs | stdlib.h | int | int | 整數 |
labs | stdlib.h | long | long | 長整數 |
llabs | stdlib.h | long long | long long | 長長整數 |
fabs | math.h | double | double | 浮點數 |
fabsf | math.h | float | float | 單精度 |
fabsl | math.h | long double | long double | 長雙精度 |
abs報錯/行為異常?stdlib.h,C89隱式聲明int abs(),傳入double截斷#define abs(x) ((x)>0?(x):-(x)),參數副作用/類型不匹配cstdlib提供std::abs重載,g++自動選擇正確版本;gcc需顯式用abs(int)/labs/fabs#include <stdlib.h> // 必須包含,提供abs/labs/llabs #include <math.h> // 提供fabs系列 // 整數矩陣:用abs (int) 或 labs (long) if (abs(a[i][j]) > abs(max_val)) // ✅ 正確 // 若矩陣元素為double: if (fabs(a[i][j]) > fabs(max_val)) // ✅ 正確
INT_MIN絕對值溢出:abs(-2147483648)未定義行為,可用labs或手寫(x<0? -(long)x : x)時間 O(n·m),空間 O(1) 額外空間(原地掃描)。