Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm phần tử có hiệu số tuyệt đối với tổng của tất cả các phần tử khác lớn hơn k trong C ++

Chúng tôi được cung cấp một mảng các số nguyên. Mục đích là đếm các số sao cho hiệu số tuyệt đối giữa tổng của tất cả các phần tử và phần tử đó lớn hơn biến k.

Chúng ta sẽ làm điều này bằng cách lấy tổng các phần tử của mảng. Bây giờ đối với mỗi phần tử arr [i], checkif -

sum-2 (arr [i])> k, vì tổng đã bao gồm arr [i] nên hãy trừ đi hai lần. Nếu số gia tăng đúng.

Hãy cùng hiểu với các ví dụ.

Đầu vào - arr [] ={1,2,3,0,3,2,0,1}, k =10

Đầu ra - Số phần tử:2

Giải thích - Tổng các phần tử là 12

12-1-1 =10, 12-2-2 =8, 12-3-3 =6, 12-0-0 =12.

Chỉ có 12> 10, do đó, đối với 2 phần tử (0), điều kiện là đúng.

Đầu vào - arr [] ={1,1,1,1,1} k =10

Đầu ra - Số phần tử:0

Giải thích - Tổng các phần tử là 5

Đối với mỗi 1 5-1-1 =3 <10.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy một mảng số nguyên arr [] được khởi tạo với các số ngẫu nhiên.

  • Hàm numberCount (int arr [], int n, int k) lấy mảng và độ dài của nó làm đầu vào và trả về số lượng các phần tử có hiệu số tuyệt đối với tổng của tất cả các phần tử khác lớn hơn k

  • Lấy số lượng ban đầu là 0.

  • Tính tổng tất cả các phần tử của mảng dưới dạng tổng.

  • Bây giờ chuyển toàn bộ mảng từ i =0 đến i

  • Mỗi phần tử arr [i], nếu sum-arr [i] -arr [i]> k, số gia tăng.

  • Tổng số trả về ở cuối vòng lặp là kết quả cuối cùng.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of elements: 2