题目分析:

首先,题目要求在区间[l,r]内任取一个数小于等于x的概率,我们可以先求出区间[l,r]中所有数的个数n,再求出小于等于x的数的个数m,概率即为m/n。因此,我们只需要统计区间[l,r]中小于等于x的数的个数即可。

代码实现:

可以使用循环遍历区间[l,r],统计小于等于x的数的个数。时间复杂度为O(r-l+1)。

#include <iostream>
using namespace std;

int main() {
    int l, r, x;
    cin >> l >> r >> x;
    int n = r - l + 1;
    int m = 0;
    for (int i = l; i <= r; i++) {
        if (i <= x) {
            m++;
        }
    }
    double p = (double)m / n;
    cout << p << endl;
    return 0;
}

代码优化:

我们可以利用数学知识,简化代码。首先,我们可以将区间[l,r]映射到[0,r-l],即将l变成0,将r变成r-l,将x变成x-l。这样,我们只需要统计[0,r-l]中小于等于x-l的数的个数即可。时间复杂度为O(1)。

#include <iostream>
using namespace std;

int main() {
    int l, r, x;
    cin >> l >> r >> x;
    int n = r - l + 1;
    int m = min(x-l+1, r-l+1);
    double p = (double)m / n;
    cout << p << endl;
    return 0;
}
给你三个数lrx问在l到r之间任取一个数小于等于x的概率有多大请用C++解决这个问题

原文地址: https://www.cveoy.top/t/topic/qCq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录