PAT乙级1060

英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” 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
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <queue>
 4 #include <vector>
 5 #include<string.h>
 6 #include<map>
 7 #include<bits/stdc++.h>
 8 #define LL long long
 9 using namespace std;
10 #define maxn 100005
11 int main()
12 {
13     int n;
14     cin>>n;
15     int a[n];
16     for(int i=1;i<=n;i++)
17         cin>>a[i];
18     sort(a+1,a+n+1);
19     int ans=0;
20     if(a[1]>n)
21         cout<<n<<endl;
22     else{
23     for(int i=n-1;i>=1;i--)
24     {
25         //n-i 天数
26         //a[i+1]英里数
27         if((n-i)<a[i+1])
28         {
29             ans=n-i;
30         }
31     }
32     cout<<ans<<endl;
33     }
34     return 0;
35 }

思路:
给输入的n个数排序,

分类讨论:当a[1]超过n,代表这n天骑行都超过n,满足题目条件可以直接输出;

当a[1]小于等于n时,i相当于一个游标从n-1项开始向前遍历,n-i代表骑行的天数,a[i+1]代表第i+1天骑行的英里数。当(n-i)<a[i+1]时,满足(n-i)天骑行的英里数大于(n-i),满足题意,可得到解。随着i的不断减小,n-i的值不断增大,题目要求的是最大值,所以不能得到一个解就直接break;,以这个思路的话需要遍历完所有的情况。


posted @ 2019-05-20 12:35  zuiaimiusi  阅读(184)  评论(0编辑  收藏  举报