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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告