import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
int m=scanner.nextInt();
//每种出现的概率
double p = 1.0 / n;
//买 i 张凑齐 j 种印章的概率
double[][] dp=new double[100][100];
for ( int i = 1; i <= m; i++) {
for ( int j = 1; j <= n; j++) {
//买 i 张只能凑齐 i 种,要集齐j种的概率为0
if ( i < j ) dp[i][j] = 0;
//买 i 张凑齐 1 种的概率
if ( j == 1 ) {
dp[i][j] = Math.pow (p, i-1);
}else {
//买i张凑齐n种的概率
//跟前面买的 i-1 张中有重复的
dp[i][j] = dp[i-1][j] * (j*1.0/n) +
//跟前面买的 i-1 张中没有重复的
dp[i-1][j-1] * ((n-j+1)*1.0/n);
}
}
}
System.out.printf("%.4f",dp[m][n]);
}
}
印章
最新推荐文章于 2024-07-19 18:29:09 发布