题目地址
解题思路
通过数学归纳法来找出计算公式。
已知 ai = (ai-1 + ai+1) / 2 - ci
因此:
a1 = (a0 + a2) / 2 - c1
a2 = (a1 + a3) / 2 - c2
a1 + a1 = a0 + a2 -2c1
a1 + a2 = (a0 + a2) / 2 + (a1 + a3) / 2 - (c1 + c2) =>
a1 + a2 = a0 + a3 + 2(c1 + c2)
a1 + a3 = (a0 + a2) / 2 + (a2+ a4) / 2 - c1 - c3 =>
2(a1 + a3) = a0 + a2 + a2 + a4 - 2c1 + 2c3
又已知ai + ai = ai-1 + ai+1 + 2ci
上面变为了:
a1 + a3 = a0 + a4 - 2(c1 + c2 + c3)
a1 + an = a0 + an - 2(c1 + c2 + … + cn)
将n个式子相加得到
(n+1) a1 + a2 + a3 + … + an = na0 + a2 + … + an+1 -2[ nc1 + (n-1)c2 + … + cn ]
整理得到
a1 = { na0 + an+1 - 2[ nc1 + (n-1)c2 + … + cn ] } / (n + 1)
AC代码
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
double a, b, c, sumc = 0;
cin >> a >> b;
for (int i=1; i<=n; i++)
{
cin >> c;
sumc += (n-i+1) * c;
}
sumc = sumc * 2;
a = (n*a + b - sumc) / (n+1);
printf("%0.2lf\n", a);
}
return 0;
}