PAT1060 爱丁顿数
数列中E个数大于E,求E的最大值,首先想到升序排序。
这样,只要 a[i]
大于位于 a[i]
及其之后元素的个数 n-i ,那么 a[i]
之后的所有元素都将大于 n-i ,由于是从剩余个数的最大值递减遍历,遇到的第一个满足条件的 n-i 就是要找的数。AC代码如下。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n); //升序排列,如果a[i]比所剩的个数大,那么所剩的所有数都比所剩的个数大,因为是从所剩个数最大开始遍历,遇到的第一个就是最大的那个。
for(int i=0;i<n;i++){
if(a[i]>n-i){
cout<<n-i;
return 0;
}
}
cout<<0;
}