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
广告