Java 代码实现一个数字再次出现的概率
时间: 2024-03-01 20:51:04 浏览: 22
假设有一个包含n个数字的数组,数字的范围为1到m,现在从这个数组中随机抽取k个数字,求这k个数字中至少有一个数字重复出现的概率。
这个问题可以使用概率论中的补集思想来解决。即先求出这k个数字中没有数字重复出现的概率,然后用1减去这个概率即可得到至少有一个数字重复出现的概率。
假设我们选取的第一个数字为x1,则后面选取的k-1个数字中不能有x1,因此后面选取的数字的范围为1到m-1。如果我们选取的第二个数字为x2,则后面选取的k-2个数字中不能有x2,因此后面选取的数字的范围为1到m-2。以此类推,对于第i个数字,后面选取的数字的范围为1到m-i+1。
因此,选取k个数字且没有数字重复出现的概率为:
P1 = m*(m-1)*(m-2)*...*(m-k+1)/(m^k)
那么至少有一个数字重复出现的概率为:
P2 = 1 - P1
Java代码实现如下:
```java
public static double probability(int n, int m, int k) {
double p = 1.0;
for (int i = 1; i <= k; i++) {
p *= (double)(m-i+1) / m;
}
return 1 - p;
}
```
其中,n为数组长度,m为数字范围,k为选取的数字个数。
例如,如果我们有一个包含10个数字的数组,数字范围为1到100,现在从数组中随机抽取3个数字,那么至少有一个数字重复出现的概率为:
```java
double p = probability(10, 100, 3);
System.out.println(p); //输出0.264
```
因此,这个问题的答案是0.264。