英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。
现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N)。
输入格式:
输入第一行给出一个正整数 N (≤105),即连续骑车的天数;第二行给出 N 个非负整数,代表每天的骑车距离。
输出格式:
在一行中给出 N 天的爱丁顿数。
输入样例:
10
6 7 6 9 3 10 8 2 7 8
输出样例:
6
总结:
逻辑分析。。。题意为求 骑车距离 Len 超过 E 英里 的最大天数 E。(骑车距离 Len 超过 E 英里) 在该题解法之中,较好理解的为统计满足该条件的天数,即 E 。解法:将排序之后的距离数组,进行下标与距离值的判断,即 Len[E] > E。如果满足,则天数累加。
代码:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main()
{
int n;
scanf("%d", &n);
vector<int> v(n+1, 0);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
// 降序排序
sort(v.begin() + 1, v.end(), cmp);
int max = 0;
for(int i=1;i<=n;i++) {
if( v[i] > i ) // 如果当天骑车距离,大于天数,进行累加
max++; // 天数 E 的累加求解
else
break;
}
printf("%d", max);
return 0;
}