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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章