Cho một mảng số nguyên. Nhiệm vụ là tính hiệu tuyệt đối tối đa của giá trị và tổng chỉ số. Đối với mỗi cặp chỉ số (i, j) trong mảng, tính |Arr[i] - Arr[j]| + |i - j| và tìm giá trị lớn nhất có thể.
Ví dụ
Đầu vào - Arr[] = { 1, 2, 4, 5 }
Đầu ra - Hiệu tuyệt đối tối đa: 7
Giải thích - Các cặp chỉ số và giá trị:
(0,0), (1,1), (2,2), (3,3): |i-j| = 0 (0,1): |1-2| + |0-1| = 1+1 = 2 (0,2): |1-4| + |0-2| = 3+2 = 5 (0,3): |1-5| + |0-3| = 4+3 = 7 (1,2): |2-4| + |1-2| = 2+1 = 3 (1,3): |2-5| + |1-3| = 3+2 = 5 (2,3): |4-5| + |2-3| = 1+1 = 2 Giá trị lớn nhất: 7
Đầu vào - Arr[] = { 10, 20, 21 }
Đầu ra - Hiệu tuyệt đối tối đa: 13
Phương pháp
- Nhận mảng Arr[]
- Hàm
maxabsDiff(int arr[], int n)tính hiệu tuyệt đối tối đa - Khởi tạo result = 0
- Duyệt mảng với 2 vòng lặp lồng nhau
- Tính absDiff = abs(arr[i] - arr[j]) + abs(i - j)
- Cập nhật result nếu absDiff lớn hơn
- Trả về result
Chương trình mẫu
#include <stdio.h>
#include <stdlib.h>
int maxabsDiff(int arr[], int n) {
int result = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int absDiff = abs(arr[i] - arr[j]) + abs(i - j);
if (absDiff > result)
result = absDiff;
}
}
return result;
}
int main() {
int Arr[] = {1, 2, 4, 1, 3, 4, 2, 5, 6, 5};
printf("Hiệu tuyệt đối tối đa: %d", maxabsDiff(Arr, 10));
return 0;
}
Kết quả
Hiệu tuyệt đối tối đa: 13