本来还以为推出公式后就OK的,没想到还有精度的问题。还有注意不能用long double类型,会wa的--||.
Accepted | 2949 | C++ | 00:00.10 | 16048K |
#include<stdio.h>
double c[2001][1001 ];
double power2[1001 ];
void solve(int n)
{
double res = 0 ;
for(int i = 0; i < n; i++ )
res += c[n + i - 1][i] * (n + i) * 1.0;
res /= power2[n - 1 ];
printf("%.2lf/n" , res);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("2949.txt", "r" , stdin);
#endif
for(int i = 0; i < 2001; i++ )
c[i][0] = 1, c[i][i + 1] = 0 ;
for(int i = 1; i < 2001; i++ )
for(int j = 1; j <= i && j <= 1000; j++ )
c[i][j] = c[i - 1][j - 1] / 2 + c[i - 1 ][j];
power2[0] = 1 ;
for(int i = 1; i < 1001; i++ )
power2[i] = power2[i - 1] * 2.0 ;
int t, n;
while(scanf("%d", &t) != EOF)
while(t-- && scanf("%d", &n) != EOF)
solve(n);
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0 ;
}
double c[2001][1001 ];
double power2[1001 ];
void solve(int n)
{
double res = 0 ;
for(int i = 0; i < n; i++ )
res += c[n + i - 1][i] * (n + i) * 1.0;
res /= power2[n - 1 ];
printf("%.2lf/n" , res);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("2949.txt", "r" , stdin);
#endif
for(int i = 0; i < 2001; i++ )
c[i][0] = 1, c[i][i + 1] = 0 ;
for(int i = 1; i < 2001; i++ )
for(int j = 1; j <= i && j <= 1000; j++ )
c[i][j] = c[i - 1][j - 1] / 2 + c[i - 1 ][j];
power2[0] = 1 ;
for(int i = 1; i < 1001; i++ )
power2[i] = power2[i - 1] * 2.0 ;
int t, n;
while(scanf("%d", &t) != EOF)
while(t-- && scanf("%d", &n) != EOF)
solve(n);
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0 ;
}