zoukankan      html  css  js  c++  java
  • hdu 2086 A1 = ?(数学题)

    转载链接

    因为:Ai=(Ai-1+Ai+1)/2 - Ci, 
          A1=(A0  +A2  )/2 - C1;
          A2=(A1  +  A3)/2 - C2 , ...
    =>    A1+A2 = (A0+A2+A1+A3)/2 - (C1+C2)
    =>    A1+A2 =  A0+A3 - 2(C1+C2) 
    同理可得:
          A1+A1 =  A0+A2 - 2(C1) 
          A1+A2 =  A0+A3 - 2(C1+C2)
          A1+A3 =  A0+A4 - 2(C1+C2+C3)
          A1+A4 =  A0+A5 - 2(C1+C2+C3+C4)
          ...
          A1+An = A0+An+1 - 2(C1+C2+...+Cn)
    ----------------------------------------------------- 左右求和
         (n+1)A1+(A2+A3+...+An) = nA0 +(A2+A3+...+An) + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)

    =>   (n+1)A1 = nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)

    =>   A1 = [nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)]/(n+1)
    这是一道数学题,反正我是做不出来的,虽然代码很简单,但是要推出公式还是不容易。

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    const int Max=3500;
    int main()
    {
    	double a,b,c[Max];
    	int n;
    	while(~scanf("%d",&n))
    	{
    		scanf("%lf%lf",&a,&b);
    		for(int i=1;i<=n;i++)
    			scanf("%lf",&c[i]);
    		int m=n;
    		int k=1;
    		double ans=0;
    		while(m)
    		{
    			ans +=k*c[m];
    			m--;
    			k++;	
    		}
    		ans=(n*a+b-2*ans)/(n+1);
    		printf("%.2f
    ",ans);
    	}
    
    	return 0;
    }
    


  • 相关阅读:
    设备坐标与逻辑坐标
    4个设备上下文DC
    VC6.0智能提示消失恢复
    VC
    JavaWeb_设置Cookie的作用路径
    JavaWeb_Cookie显示最近浏览的商品
    JavaWeb_Cookie
    MVC案例——通过配置切换底层存储源
    MVC案例——修改用户
    MVC案例——删除操作
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160260.html
Copyright © 2011-2022 走看看