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的话,循环结束后不会输出结果

博客讨论了Eddington Number的概念,即一个人骑行超过特定距离的最大天数。文章指出,原代码在判断条件上存在错误,将'大于'误写为'大于等于',导致可能丢失某些结果。通过修正代码,将排序后的骑行距离数组遍历,找到第一个满足条件的天数作为Eddington Number。博客强调了仔细阅读题目和理解问题的重要性。

181

被折叠的 条评论
为什么被折叠?



