1060 爱丁顿数 (25 分)
题目链接
算法分析
首先对这些数从大到小排序,然后从第一个数开始判断,如果当前数的值大于当前下标值,则合法,下标增大。直到不合法的位置p,那么p-1就是符合要求的最大整数E。
代码实现
#include<bits/stdc++.h>
using namespace std;
#define N 100005
int num[N];
bool cmp(int a, int b){
return a > b;
}
int main(){
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++ i)
scanf("%d", num + i);
sort(num + 1, num + n + 1, cmp);
int p = 1;
while(num[p] > p)
p ++;
printf("%d", p - 1);
return 0;
}