uva 10014 - Simple calculations

    技术2025-02-03  18

    这个题是典型的数学递推题,把求a1的公式算出来,这道题便解决了。

    由2ai = ai–1 + ai+1 – 2ci,将i = 1,2,3,4……n带入,得:

       2a1 = a0 + a2 - 2c1

       2a2 = a1 + a3 - 2c2

       2a3 = a2 + a4 - 2c3

       …… ……   ……

       2an = an-1 + an+1 - 2cn,

    然后保留第一个式子i, 并从第一个式子往下加,又得到n个式子:

       2a1 = a0 + a 2 - 2c1

       a1 + a2 = a0 + a3 - 2(c1 + c2)

       a1 + a3 = a0 + a4 - 2(c1 + c2 + c3)

       …… …… …… ……

       a1 + an = a0 + a - 2(c1 + c2 + c3 + …… + cn)

    n个式子相加,得:

    (n + 1)a1 = na0 + an+1 - 2(nc1 + (n-1)c2 + (n-2)c3 + …… + cn),便可求出答案

    程序代码:

    #include<iostream> #include<cstdio> using namespace std; int main() { int cases, n; double af, al, c, sum; cin>>cases; while(cases--){ cin>>n>>af>>al; sum = 0; for(int i = 0; i < n; i++){ cin>>c; sum += (n - i) * c; } printf("%0.2lf/n", (n * af + al - 2 * sum) / (n + 1)); if(cases) printf("/n"); } return 0; }  

     

    最新回复(0)