给你三个数lrx问在l到r之间任取一个数小于等于x的概率有多大请用C++解决这个问题
题目分析:
首先,题目要求在区间[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;
}
原文地址: https://www.cveoy.top/t/topic/qCq 著作权归作者所有。请勿转载和采集!