1060 爱丁顿数 (25 分)(算法分析+代码实现)

67 阅读1分钟

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;
}