2183: 就是签到题XD
Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 525 Solved: 79
Submit Status Web Board
Description
In mathematics, we suppose that f(1)=1, f(i)-f(i-1)=1/i, (2<=i<=n)
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case starts with a line containing an integer n (2 ≤ n ≤10^7).
Output
For each case, print the case number and the value of f(n). The answer should be rounded to 10 decimal places.
Sample Input
3234
Sample Output
Case 1: 1.5000000000Case 2: 1.8333333333Case 3: 2.0833333333
HINT
Source
题解:f(i)=1/1+1/2+1/3+1/4+...+1/i;分段打表即可求解(64MB<10e7*8),不然会出现内存超限。。。
#include<cstdio>
#define Max 10000005
double temp[Max/100];
void init()
{
double s=0,q=1;
for(int i=1;i<Max;i++)
{
s+=q/(double)i;
if(i%100==0)
temp[i/100]=s;
}
return ;
}
int main()
{
double ans;
int n,a;
init();
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
ans=temp[a/100];
for(int j=a/100*100+1;j<=a;j++)
ans+=(double)1/j;
printf("Case %d: %.10lf\n",i,ans);
}
}
return 0;
}