PAT 1060 爱丁顿数 (25分)

1060 爱丁顿数 (25分)

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


      
    

解析:(4)(5 5 5 4) 的答案应该是3,而不是0

解法1:一个测试点运行超时

#include<iostream>
using namespace std;

int main()
{
    cout << "sfh" << endl;
    int N, n[100000];
    cin >> N;
    for(int i = 0; i < N; i++){
        cin >> n[i];
    }
    int max = 0;
    for(int i = N; i >= 1; i--){
        int sum = 0;
        for(int j = 0; j < N; j++){
            if(n[j] >  i)
                sum++;
        }
        if(sum >= i){
            sum = i;
            if(max < sum)
                max = sum;
        }
    }
    cout << max;
    return 0;
}

解法二:调运sort函数排序,主函数只需遍历一次即可

#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a, int b)
{
    return a > b;
}

int main()
{
    int N, n[100020];
    cin >> N;
    for(int i = 0; i < N; i++){
        cin >> n[i];
    }
    int max = 0, t = 0;
    sort(n, n + N, cmp);
    while(max <= N && n[t] > t + 1)
    {
        max++;
        t++;
    }
    cout << max;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zhulmz/p/12205440.html