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

他のすべての要素の合計との絶対差がC++でkより大きい要素の数


整数の配列が与えられます。目標は、すべての要素の合計とその要素の絶対差が変数kより大きくなるように数値をカウントすることです。

これを行うには、配列の要素の合計を取得します。ここで、各要素arr [i]について、checkif-

sum-2(arr [i])> k、sumにはすでにarr [i]が含まれているため、2回減算します。真のインクリメントカウントの場合。

例を挙げて理解しましょう。

入力 − arr [] ={1,2,3,0,3,2,0,1}、k =10

出力 −要素の数:2

説明 −要素の合計は12

12-1-1 =10、12-2-2 =8、12-3-3 =6、12-0-0=12。

12> 10のみであるため、2つの要素(0)の場合、条件は真です。

入力 − arr [] ={1,1,1,1,1} k =10

出力 −要素の数:0

説明 −要素の合計は5です

各15-1-1=3<10。

以下のプログラムで使用されているアプローチは次のとおりです

  • 乱数で初期化された整数配列arr[]を使用します。

  • 関数numberCount(int arr []、int n、int k)は、配列とその長さを入力として受け取り、他のすべての要素の合計との絶対差がkより大きい要素の数を返します

  • 初期カウントを0とします。

  • 配列のすべての要素の合計を合計として計算します。

  • ここで、i=0からi

  • 各要素arr[i]の場合、sum-arr [i] -arr [i]> kの場合、カウントをインクリメントします。

  • 最終結果としてループ終了時のカウントを返します。

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int numberCount(int arr[],int n, int k){
   int count=0;
   int sum=0;
   int i;
   for(i=0;i<n;i++)
      { sum+=arr[i]; }
   for(int i=0;i<n;i++){
      if( abs(sum-arr[i]-arr[i]) > k ){
         count++;
      }
   }
   return count;
}
int main(){
   int Arr[]={ 1,2,3,4 };
   int len=sizeof(Arr)/sizeof(Arr[0]);
   int K=5;
   cout<<endl<<"Count of elements: "<<numberCount(Arr,len,K);
   return 0;
}

出力

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

Count of elements: 2

  1. C++の無向グラフの連結成分すべての最小要素の合計

    この問題では、arr [i]が(i + 1)番目のノードを表すN個の数値の配列arrが与えられます。また、エッジのMペアがあり、uとvはエッジによって接続されたノードを表します。私たちのタスクは、無向グラフのすべての連結成分の最小要素の合計を見つけるプログラムを作成することです。ノードが他のノードに接続されていない場合は、1つのノードを持つコンポーネントとしてカウントします。 問題を理解するために例を見てみましょう 入力 arr[] = {2, 7, 5, 1, 2} m = 2 1 2 4 5 出力 8 説明 以下は上に描かれたグラフです- 2つの接続されたノードと1

  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