PAT 1060 爱丁顿数(测试点3)

题目连接:请点击
读懂题意很重要
思路:先对输入的数组按距离从大到小排序,for循环遍历,把循环下标i当做天数,比较第i+1(i从0开始,所以是i+1)天与该下标所对应的骑行距离。只有当天数i+1恰好等于或大于此时的骑距离时(有i+1>=此距离),题目要求“超过”,所以有i天骑车超过此距离,既而有i天骑车超过i距离。
注1:测试点3 是因为有可能出现下列情况(给定的N天的骑行数据,每天的骑行距离均大于N公里,此时要输出N,即N为所求爱丁顿数)
输入用例
3
4 5 4
这样应当输出3,即有3天骑行距离大于3公里。

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
	return a>b;
}
int main(){
	int N;
	while(cin>>N){
		int num[N],E=0;
		for(int i=0;i<N;i++) cin>>num[i];
		sort(num,num+N,cmp);
		for(int i=0;i<N;i++){
			if(i+1>=num[i]){//第i+1天>=此时距离 可推出
				E=i;
				break;
			}
		}
		if(num[N-1]>N) E=N;//见注解 防测试点3
		cout<<E<<endl;
	} 
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章