mean给你t组数据
接下来一行给你n和字符串s 不同的字符串对应公式中不同的b带入公式求解
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,i,j;
while(cin>>t)
{
while(t--)
{
int n;
char s[111];
scanf("%d %s",&n,s);
//bit for b = 2, nat for b = e, and dit (or digit) for b = 10
double ans=0,b=0;
double x[11111],sum=0;
for(i=0;i<n;i++)
{
scanf("%lf",x+i);
sum+=x[i];
}
if(!strcmp("bit",s))
{
b=2;
for(i=0; i<n; i++)
{
if(x[i]==0) continue;
double p=x[i]/sum;
ans+=(-p*(log(p)/log(b)));
}
}
else if(!strcmp("nat",s))
{
for(i=0; i<n; i++)
{
if(x[i]==0) continue;
double p=x[i]/sum;
ans+=(-p)*log(p);
}
// printf("%.12lf\n",ans);
//continue;
}
else
{
b=10;
for(i=0; i<n; i++)
{ if(x[i]==0) continue;
double p=x[i]/sum;
ans+=(-p*(log(p)/log(b)));
}
}
printf("%.12lf\n",ans);
}
}
return 0;
}