• 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;
    }
    


  • 相关阅读:
    web前端node.js常用命令
    常见的一部份面试题
    JavaScript基础语法
    表单属性、标签
    文字美化学习总结
    JS-实现横向手风琴
    Js-带进度条的轮播图
    canvas-八卦图和时钟实现
    JS-闭包练习
    JS-上下文练习
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160260.html
Copyright © 2020-2023  润新知