PTA basic 1060 爱丁顿数 (25 分) c++语言实现(g++)

英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” 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

 

测试点 0 3 测试用例通过

测试点4 5  给定序列中 中间存在0的情况

测试点1 2 连续N天N公里应该输出N-1

 

测试用例

//应该输出4 

5

5 5 5 5 5

 

//应该输出4

5

4 4 4 4 4

 

 

解题思路

1.题目实际上非常简单,   但是要注意细节  统计有E的最大值    E的条件是 E天的公里数 大于 E公里 

2.所以把输入的公里数序列按从大到小排列  统计大于E的个数就可以  

  因为每统计一天,下标 i(从0开始) 要+1, 而i+1同时也是当前比较的天数 , 因此 如果当前元素的公里数小等于i+1(或者E+1)的时候, 跳出循环输出统计的天数

 

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
    int n,temp,i;
    cin >>n;
    vector<int> mark;
    for(i=0;i<n;i++){
        cin >>temp;
        mark.push_back(temp);
    }
    sort(mark.rbegin(),mark.rend());//从大到小排列
    for(i=0;i<n;i++){//i就是E
        if(mark[i]<=i+1){//当公里数小等于E时,E取得最大值,这里的i+1是因为i从0开始 ,而E 天数从1开始计算, i+1就是 E 天
            break;
        }
    }
    cout <<i<<endl;
    return 0;
}

 

posted @ 2021-05-10 15:10  keiiha  阅读(111)  评论(0编辑  收藏  举报