Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cでの値とインデックスの合計の最大絶対差


整数の配列が与えられます。タスクは、値とインデックスの合計の最大絶対差を計算することです。つまり、配列内のインデックス(i、j)の各ペアについて、|を計算する必要があります。 Arr [i]-A [j] | + | i-j |そして、可能な最大のそのような合計を見つけます。ここ|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] | + | i-j |次のとおりです

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] | + | i-j |次のとおりです

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>
// 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;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Maximum absolute difference of value and index sums: 13

  1. CellpaddingとCellspacingの違い

    この投稿では、セルパディングとセル間隔の違いを理解します。 セルパディング 単一のセルに関連付けられています。 セルの境界とセル内のコンテンツの間に存在する空白を制御するのに役立ちます。 セルパディングのデフォルト値は1です。 効果的な方法として使用されます。 HTMLのタグを使用して作成されます。 属性のタイプは「cellpadding」に設定されています。 例 <table cellpadding="value" >.....</table> セルスペース 複数のセルに関連付けられています。 単

  2. Xとの絶対差がC++で最大値を与えるノードを見つけます

    ツリーがあり、すべてのノードの重みと整数xがあるとします。 | weight [i]--x|となるようなノードiを見つける必要があります。最小です。グラフが以下のようで、x =15 出力は3になります。ノードごとに次のようになります ノード1、| 5 – 15 | =10 ノード2、| 10 – 15 | =5 ノード3、| 11 – 15 | =4 ノード4、| 8 – 15 | =7 ノード5、| 6 – 15 | =9 アイデアは単純です。ツリーでDFSを実行し、ノードの追跡を行います。ノードのxとの重み付き絶対差が最小値を示します 例 #include