【PAT】 1117 Eddington Number (25 分)

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

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;
    }
    
  • 总结:

    1. 没读懂题
    2. 粗心:
      1. 没注意是more than,也就是大于,而不是大于等于
      2. for循环的停止条件不该是if(v[i] <= i + 1),而该是if(v[i] > i + 1)。因为如果用第一种条件:没有考虑最坏结果:如果E为n的话,循环结束后不会输出结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值