1117 Eddington Number (25 分)
-
题目大意:“Eddington number”:一个人骑车超过E公里的最大天数E天(一开始每读懂题)。现在分别给出n天的骑行距离,请找出相应的E(<=N)。
-
思路:现将n个数从大到小排序,然后找到v[i] < i + 1,i就是E
-
知识点:
-
代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool cmp(int a, int b){ return a > b; } int main() { int n; scanf("%d", &n); vector<int> v(n); for(int i = 0; i < n; i++) scanf("%d", &v[i]); sort(v.begin(), v.end(), cmp); int temp = 0; for(int i = 0; i < n; i++){ if(v[i] > i + 1) temp = i + 1; else break; } printf("%d", temp); return 0; }
-
总结:
- 没读懂题
- 粗心:
- 没注意是more than,也就是大于,而不是大于等于
- for循环的停止条件不该是
if(v[i] <= i + 1)
,而该是if(v[i] > i + 1)
。因为如果用第一种条件:没有考虑最坏结果:如果E为n的话,循环结束后不会输出结果