此题通过找规律来做,即运用递推更好做。
代码如下:
- #include<stdio.h>
- #include<string.h>
- double a[50001];
- double b (void)
- {
- int i;
- memset(a,0,sizeof(a));
- a[0]=0;
- a[1]=1;
- a[2]=3;
- for(i=3;i<50000;i++)
- {
- a[i]=a[i-1]*2-a[i-2]+2.0/i;
- }
- }
- int main (void)
- {
- int n;
- b();
- while(~scanf("%d",&n)&&n)
- {
- printf("%.2lf\n",a[n]);
- }
- return 0;
- }
当然,也可不用递推:
代码如下:
- #include<stdio.h>
- int main (void)
- {
- int a,i;
- double sum2=0.0,sum=0.0;
- while(~scanf("%d",&a)&&a!=0)
- {
- sum2=0.0;
- double k=1.0;
- for(i=a;i>1;i--)
- {
- sum=(1.0/i)*k;
- sum2=sum+sum2;
- k++;
- }
- printf("%.2lf\n",a+2*sum2);
- }
- return 0;
- }