这个题是典型的数学递推题,把求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; }