样例输入1
1
50.50 25.50
10.15
样例输出1
27.85
样例输入2
2
-756.89 52.52
172.22 67.17
样例输出2
-761.49
思路:
通过递推公式吧前三项写出来就能明显的发现规律
A1 = (A0+A2)/2-C1
A2 = (A1+A3)/2-C2 ------>3A2 = A0 - 2(C1+2C2)+2A3
A3 = (A2+A4)/2-C3------->4A3 = A0 - 2(C1+2C2+3C3)+3A4
由此可以判断:(n+1)An = A0 - 2F(n) + nAn+1 (F(n) = C1+2C2+3C3+.....+nCn)
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1050;
int n;
double a[maxn], c[maxn];
double fun(int n)
{
if(n == 1)
return c[1];
return fun(n-1) + n * c[n];
}
void fun2(int n)
{
for(int i = n;i >= 1;i--)
{
a[i] = (a[0] - 2*fun(i) + i*a[i+1])/(i+1);
}
return;
}
int main()
{
while(cin >> n)
{
scanf("%lf%lf", &a[0], &a[n+1]);
for(int i = 1;i <= n;i++)
{
scanf("%lf", &c[i]);
}
fun2(n);
printf("%.2lf\n", a[1]);
}
return 0;
}