对于这个问题,是一个期望问题,但是题解的确是比较需要思想的,这个题的具体解法则可以这样去理解:
对于n个数字,和为sum,则第一次掷出数字的期望为sum/n,第二次的期望则必须先掷出可以m个可以重新扔的数字中的一个,所以第二次期望则为(n/m)*sum/n,第三次则为(n/m)^2*sum/n,依次列推,则由等比数列无限项公式可以得出,最终期望其实就是sum/(n-m),这题具体还有一些需要注意的问题则就是对于一些特殊情况的特判以及对于一些特判的顺序问题,具体程序如下:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,m;
double ans;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
sum+=x;
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int x;
scanf("%d",&x);
}
if(sum==0)
{
printf("0.00\n");continue;
}
if(n==m)
{
printf("inf\n");continue;
}
ans=(double)sum/(n-m);
printf("%.2f\n",ans);
}
return 0;
}