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;,以这个思路的话需要遍历完所有的情况。