C++中計算其絕對差值大於k的元素個數


給定一個整數陣列。目標是計算這樣的數字:其與所有其他元素之和的絕對差值大於變數k。

我們將透過獲取陣列元素的總和來實現這一點。現在,對於每個元素arr[i],檢查是否:

sum - 2 * (arr[i]) > k,因為sum已經包含arr[i],所以減去它兩次。如果為真,則遞增計數。

讓我們透過示例來理解。

輸入 − 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

對於每個1,5 - 1 - 1 = 3 < 10。

下面程式中使用的演算法如下:

  • 我們使用一個用隨機數初始化的整數陣列arr[]。

  • 函式numberCount(int arr[], int n, int k) 以陣列及其長度作為輸入,並返回其絕對差值與所有其他元素之和的絕對差值大於k的元素個數。

  • 將初始計數設定為0。

  • 計算陣列所有元素的總和為sum。

  • 現在遍歷整個陣列,從i=0到i<n。

  • 對於每個元素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

更新於:2020年8月31日

192 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.