题目连接:请点击
读懂题意很重要
思路:先对输入的数组按距离从大到小排序,for循环遍历,把循环下标i当做天数,比较第i+1(i从0开始,所以是i+1)天与该下标所对应的骑行距离。只有当天数i+1恰好等于或大于此时的骑距离时(有i+1>=此距离),题目要求“超过”,所以有i天骑车超过此距离,既而有i天骑车超过i距离。
注1:测试点3 是因为有可能出现下列情况(给定的N天的骑行数据,每天的骑行距离均大于N公里,此时要输出N,即N为所求爱丁顿数)
输入用例
3
4 5 4
这样应当输出3,即有3天骑行距离大于3公里。
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int N;
while(cin>>N){
int num[N],E=0;
for(int i=0;i<N;i++) cin>>num[i];
sort(num,num+N,cmp);
for(int i=0;i<N;i++){
if(i+1>=num[i]){//第i+1天>=此时距离 可推出
E=i;
break;
}
}
if(num[N-1]>N) E=N;//见注解 防测试点3
cout<<E<<endl;
}
return 0;
}