使用 C++ 統計元素個數,要求陣列中值大於等於 X 的元素恰好有 X 個


給定一個整數陣列。目標是找到滿足以下條件的陣列元素個數:

對於每個元素,陣列中大於等於它的數字個數應與其自身的值完全相等。不包括該元素本身。如果元素為 X,則陣列中恰好有 X 個數字大於或等於 X。(不包括該元素)。

輸入

Arr[]= { 0,1,2,3,4,9,8 }

輸出

Elements exactly greater than equal to itself : 1

說明 - 元素和大於等於它的數字:

Arr[0]: 6 elements are >= 0 , 6!=0 count=0
Arr[1]: 5 elements are >= 1 , 5!=1 count=0
Arr[2]: 4 elements are >= 2 , 4!=2 count=0
Arr[3]: 3 elements are >= 3 , 3==3 count=1
Arr[4]: 2 elements are >= 4 , 2!=4 count=1
Arr[4]: 0 elements are >= 9 , 0!=9 count=1
Arr[6]: 1 element is >= 8 , 1!=8 count=1

3 是唯一一個恰好有 3 個元素大於等於它的元素 (4, 8, 9)

輸入

Arr[]= { 1,1,1,1,1 }

輸出

Elements exactly greater than equal to itself : 0

說明 - 所有元素都相等且計數不等於 1

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

  • 整數陣列 Arr[] 用於儲存整數。

  • 整數 ‘n’ 儲存陣列的長度。

  • 函式 findcount(int arr[],int n) 以陣列及其大小作為輸入,並返回前面解釋的類似 X 的數字的個數。

  • 變數 count 用於儲存類似 X 的數字的個數。

  • 初始化 ans=0,它將統計此類數字。

  • 使用 for 迴圈遍歷陣列,從第一個元素(索引=0)開始。

  • 在 for 迴圈內再次從起始元素開始遍歷,如果任何 arr[j]>=arr[j] 且 i!=j,則遞增計數。

  • 在 j 迴圈結束後,將 count 與 arr[i] 進行比較。如果 count==arr[i](恰好有 arr[i] 個元素 >=arr[i]),則遞增答案 ‘ans’

  • 兩個 for 迴圈結束後,返回 ‘ans’ 中的結果。

示例

 線上演示

#include <iostream>
#include <algorithm>
using namespace std;
int findcount(int arr[],int n){
   sort(arr,arr+n);
   int count=0;
   int ans=0;
   for(int i=0;i<n;i++){
      count=0;
      for(int j=0;j<n;j++){
         if(arr[j]>=arr[i] && i!=j)
            count++;
      }
      if(count==arr[i])
         ans++;
   }
   return ans;
}
int main(){
   int Arr[]= { 0,1,2,3,4,5,6 };
   int k=7;
   int n=sizeof(Arr)/sizeof(Arr[0]);
   std::cout<<"Elements exactly greater than equal to itself : "<<findcount(Arr,n);
   return 0;
}

輸出

Elements exactly greater than equal to itself : 1

更新於:2020-7-28

477 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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