对于一个含有 n+2n+2 个元素的数列,A_0, A_1, \cdots A_nA0?,A1?,?An?,满足这样的递归公式
\displaystyle A_i = \frac{A_{i-1} + A_{i + 1}}{2} - C_i\ \ \ 1 \le i \le nAi?=2Ai−1?+Ai+1??−Ci? 1≤i≤n
现在我们知道 A_0, A_{n + 1}A0?,An+1? 和 C_1, C_2, \cdots C_nC1?,C2?,?Cn?。
现在请你帮忙计算 A_1A1? 的值。
输入格式
第一行输入一个整数 n(1 \le n \le 1000)n(1≤n≤1000)。
第二行输入两个数 A_0A0? 和 A_{n+1}An+1?,接着是 nn 个数据分别是 C_1,C_2, \cdots C_nC1?,C2?,?Cn?。所有的数据均是两位小数的浮点数。
输出格式
输出 A_1A1? 的值,结果保留两位小数。
样例输入1
1 50.50 25.50 10.15样例输出1
27.85样例输入2
2 -756.89 52.52 172.22 67.17样例输出2
-761.49
由公式可以推出(不考虑C):
A2=2*A1-A0;
A3=2*A2-A1=3A1-2*A0;
A4=2*A3-A2=4*A1-3*A0;
An+1=(n+1)*A1-...
设A1的值为0,通过递推计算出An+1的值为r,然后给出真正的An+1的值t,则t-r所得的结果即为(n+1)个A1的值。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 double a[1010]; 5 6 int main(){ 7 int n; 8 double an1,c; 9 cin>>n; 10 cin>>a[0]>>an1; 11 a[1]=0; 12 for(int i=2;i<=n+1;i++){ 13 cin>>c; 14 a[i]=2*a[i-1]-a[i-2]+2*c; 15 } 16 printf("%.2lf\n",(an1-a[n+1])/(n+1)); 17 return 0; 18 }
原文地址:https://www.cnblogs.com/Kiven5197/p/8672428.html
时间: 2024-11-09 04:26:14