洛生& 2025-02-08 12:52 采纳率: 66.7%
浏览 17
已结题

桐桐的雷达(模拟)查错

桐桐的雷达
桐桐在去广州的路上,对高速公路上的测速雷达发生了兴趣,于是开始研究有关知识,发现在设计测速雷达时有这样一个计算问题:
一个测试雷达都有一个最高限速和一个最低限速。如果探测到的数据超过最高限速或低于最低限速,都认为驾驶员是违规的。
为了检测探测器是否正常工作,雷达自身要周期性地分析一下最近的数据。它假设多数驾驶员是遵守交通规则的,因此如果有超过10%的数据是违规的,则认为探测器可能出了问题。
现在你要编程,根据给定的数据,计算合法速度的平均速度。如果你判断出是探测器坏了,则输出0.0。

输入
第一行有3个整数A,B,C , 1≤A≤200, A≤B≤200, 1≤C≤50。分别为最低限速和最高限速和探测到的数据个数。后面一行有C个要分析有数据。
输出
只有一行,为计算的结果。
样例输入 Copy
1 50 10
42 43 44 45 46 47 48 49 50 51
样例输出 Copy
46.0
提示
注意:答案误差在1E-9内。

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int a, b, c;
    cin >> a >> b >> c;
    int count = 0;
    ll sum = 0;
    for (int i = 0; i < c; ++i) {
        ll num;
        cin >> num;
        if (num >= a && num <= b) {
            sum += num;
        }
        else {
            count++;
        }
    }
    if (count * 10 > c) {
        cout << "0.0";
    }
    else {
        double avg = sum*1.0 / (c-count);
        cout << fixed << setprecision(1) << avg;
    }
}

试了好多次,还是不知道哪里不对,提示里的答案误差在1e-9内又是什么意思呢

  • 写回答

4条回答 默认 最新

  • 洛生& 2025-02-08 22:55
    关注

    已解决,改成保留9位小数即可
    AC代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int a, b, c;
        cin >> a >> b >> c;
        int count = 0;
        double sum = 0.0;
        for (int i = 0; i < c; ++i) {
            long long num;
            cin >> num;
            if (num >= a && num <= b) {
                sum += num;
            }
            else {
                count++;
            }
        }
        if (count * 10 > c) {
            cout << "0.0";
        }
        else {
            double avg = sum * 1.0 / (c - count);
            cout << fixed << setprecision(9) << avg;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 修改了问题 2月8日
  • 创建了问题 2月8日