Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tìm hiệu tuyệt đối tối đa của giá trị và tổng chỉ số trong C

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