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