Computer >> Máy Tính >  >> Lập trình >> lập trình C

Chênh lệch tuyệt đối lớn nhất của tổng giá trị và chỉ số trong C


Chúng ta được cung cấp với một mảng các số nguyên. Nhiệm vụ là tính toán chênh lệch tuyệt đối lớn nhất của tổng giá trị và chỉ số. Tức là với mỗi cặp chỉ số (i, j) trong một mảng, chúng ta phải tính | Arr [i] - A [j] | + | i-j | và tìm tổng lớn nhất có thể. Đây | A | nghĩa là giá trị tuyệt đối của A. Nếu mảng có 4 phần tử thì các chỉ mục là 0,1,2,3 và các cặp duy nhất sẽ là ((0,0), (1,1), (2,2), (3,3) , (0,1), (0,2), (0,3), (1,2), (1,3), (2,3)).

Đầu vào - Arr [] ={1,2,4,5}

Đầu ra - Chênh lệch tuyệt đối lớn nhất của tổng giá trị và chỉ số - 7

Giải thích - Các cặp chỉ số và | A [i] -A [j] | + | i-j | như sau

1. (0,0), (1,1), (2,2), (3,3)--------- |i-j| for each is 0.
2. (0,1)---------- |1-2| + |0-1|= 1+1 = 2
3. (0,2)---------- |1-4| + |0-2|= 3+2 = 5
4. (0,3)---------- |1-5| + |0-3|= 4+3 = 7
5. (1,2)---------- |2-4| + |1-2|= 2+1 = 3
6. (1,3)---------- |2-5| + |1-3|= 3+2 = 5
7. (2,3)---------- |4-5| + |2-3|= 1+1 = 2
Maximum value of such a sum is 7.

Đầu vào - Arr [] ={10,20,21}

Đầu ra - Chênh lệch tuyệt đối lớn nhất của tổng giá trị và chỉ số - 13

Giải thích - Các cặp chỉ số và | A [i] -A [j] | + | i-j | như sau

1. (0,0), (1,1), (2,2)--------- |i-j| for each is 0.
2. (0,1)---------- |10-20| + |0-1|= 10+1 = 11
3. (0,2)---------- |10-21| + |0-2|= 11+2 = 13
4. (1,2)---------- |20-21| + |1-2|= 1+1 = 2
Maximum value of such a sum is 13.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy một mảng số nguyên có các số là Arr []

  • Hàm maxabsDiff (int arr [], int n) được sử dụng để tính toán chênh lệch tuyệt đối lớn nhất của tổng giá trị và chỉ số ..

  • Chúng tôi khởi tạo kết quả biến bằng -1.

  • Bên trong vòng lặp for duyệt qua mảng các số nguyên ngay từ đầu.

  • Trong vòng lặp for lồng nhau đi qua các phần tử còn lại và tính tổng tuyệt đối của giá trị phần tử và các chỉ số i, j (abs (arr [i] - arr [j]) + abs (i - j)) và lưu trữ trong một biến absDiff.

  • Nếu tổng mới được tính toán này nhiều hơn tổng trước đó thì hãy lưu trữ nó trong "kết quả".

  • Trả về kết quả sau khi duyệt qua toàn bộ mảng.

Ví dụ

#include <stdio.h>
#include <math.h>
// Function to return maximum absolute difference
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("Maximum absolute difference of value and index sums: %d", maxabsDiff(Arr,10));
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Maximum absolute difference of value and index sums: 13