#include<cstdio>
const int maxn = 1e5 + 10;
int a[maxn];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
int E;
for (int i = n; i >= 0; i--)
{
int count = 0;
for (int j = 0; j < n; j++)
{
if (a[j] > i) count++;//注意题目给的要求是more than,没有equal的情况
}
if (count>=i)
{
E = i;
break;
}
}
printf("%d", E);
return 0;
}
看了网上其他人的写法都是先sort,然后判断,mark一个看到的最简洁的
https://blog.csdn.net/qq_34594236/article/details/53513689
#include<cstdio>
#include<algorithm>
#define N 100001
using namespace std;
int j,n,ans,a[N];
int main(){
scanf("%d",&n);
//数据输入
for(int i=0 ;i<n ;i++) scanf("%d",&a[i]);
sort(a,a+n);
//数据处理
for(j=n-1,ans=1 ;j>=0 ;j--,ans++){
if(a[j]<=ans)break;
}
//因为当判断到<=才退出循环,因此答案是前一天
printf("%d\n",ans-1);
return 0;
}