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

开启你的职业生涯

完成课程获得认证

开始学习
广告