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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP