C中的值和索引和的最大绝对差

给我们一个整数数组。任务是计算值和索引和的最大绝对差。也就是说,对于数组中的每对索引(i,j),我们必须计算| Arr [i]-A [j] | + | ij | 并找到最大可能的总和。| A | 表示A的绝对值。如果数组有4个元素,则索引为0、1、2、3,唯一对将为((0,0),(1,1),(2,2),(3,3) ,(0,1),(0,2),(0,3),(1,2),(1,3),(2,3))。

输入− Arr [] = {1,2,4,5}

输出-值和索引和的最大绝对差-7

说明-索引对和| A [i] -A [j] | + | ij | 如下面

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.

输入− Arr [] = {10,20,21}

输出-值和索引和的最大绝对差-13

说明-索引对和| A [i] -A [j] | + | ij | 如下面

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.

以下程序中使用的方法如下

  • 我们将一个整数数组作为Arr []

  • 函数maxabsDiff(int arr [],int n)用于计算值和索引和的最大绝对差。

  • 我们用-1初始化变量结果。

  • 在for循环内,从头开始遍历整数数组。

  • 在嵌套的for循环中,遍历其余元素并计算元素值和索引i,j(abs(arr [i]-arr [j])+ abs(i-j))的绝对总和,并将其存储在变量absDiff中。

  • 如果此新计算出的总和大于先前的总和,则将其存储在“结果”中。

  • 遍历整个数组后返回结果。

示例

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

输出结果

如果我们运行上面的代码,它将生成以下输出-

Maximum absolute difference of value and index sums: 13
猜你喜欢