关于c++:PAT甲级1117-Eddington-Number

39次阅读

共计 569 个字符,预计需要花费 2 分钟才能阅读完成。

题目粗心

给定 N 天中每一天的骑行间隔,如果有 E 天的骑行间隔大于 E,那么 E 就称之为艾丁顿数, 请找出这个数字(尽可能大)

算法思路

既然要找到 E 的最大值, 那么在每一天的骑行间隔大于 N 的时候,E 获得最大值 N,这也是 E 的初始值。咱们能够想到,(数组的下标值 +1)其实就是第几天,那么将骑行的间隔逆序排序,这样对于骑行间隔大于 (以后下标值 +1) 的地位,就是 E 的一个可能取值(E 取下标值 +1),咱们为了获得最大值就是一直往右挪动,晓得第一次呈现骑行间隔小于等于以后下标值 + 1 的地位,那么其右边就是 E 的最大值.

提交后果

AC 代码

#include<cstdio>
#include<algorithm>
#include<unordered_set>
#include<vector>

using namespace std;

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

int main() {
    int n;
    scanf("%d",&n);
    int num[n];
    for(int i=0;i<n;++i){scanf("%d",&num[i]);
    }
    sort(num,num+n,cmp);
    int E = n;// 没有解的时候,E 为 n
    for(int i=0;i<n;++i){if(num[i]<=i+1){
            E = i;
            break;
        }
    }
    printf("%d\n",E);
    return 0;
}

正文完
 0