#include
#include
float aaa(int n, int m)
{
if (n == 1)
{
return m;
}
else
return m * aaa(n - 1, m - 1) / n;
}
int main()
{
float n = 0, m = 0, P = 0, i = 0,sum1=1,sum2=1,sum3=1,j=0,a=0;
scanf("%f%f", &n, &m);
if (((20 >= n) && (n >= 1)) && ((m >= 1) && (m <= 20)))
{
sum1 = aaa(n, m);
sum2 *= pow(1/n,n);
P = sum1 * sum2;
printf("%.4lf", P);
}
return 0;
}
我想问一下我这个哪里错了呀
#include<stdio.h>
#include<math.h>
double dp[22];
long long c_fun(int n,int m)//求组合数C(n,m);
{
long i;
long long ans_n=1,ans_m=1,ans_nm=1;
for(i=2;i<=n;i++)
ans_n=ans_n*i;
for(i=2;i<=m;i++)
ans_m=ans_m*i;
for(i=2;i<=n-m;i++)
ans_nm=ans_nm*i;
return ans_n/(ans_m*ans_nm);
}
double fun(int n,int m)//求解印章问题
{
int i,j;
double t=0;
dp[1]=1.0;//只需凑齐1种,必定可以凑齐
for(i=2;i<=n;i++)//循环,计算需凑齐2,3,4...n种的情况
{
t=0;
for(j=1;j<i;j++)
{
t=t+c_fun(i,j)*dp[j]*pow(j,m);//递推公式
}
dp[i]=1-t/pow(i,m);
}
return dp[n];
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
fun(n,m);//求解
printf("%.4lf\n",dp[n]);
return 0;
}
你看看这个对么?
```c++
```