计蒜客-数列求值(数学)
2018-03-29 15:27
691 查看
数列求值
对于一个含有 n+2n+2n+2 个元素的数列,A0,A1,⋯AnA_0, A_1, \cdots A_nA0,A1,⋯An,满足这样的递归公式Ai=Ai−1+Ai+12−Ci 1≤i≤n\displaystyle A_i = \frac
4000
{A_{i-1} + A_{i + 1}}{2} - C_i\ \ \ 1 \le i \le nAi=2Ai−1+Ai+1−Ci 1≤i≤n
现在我们知道 A0,An+1A_0, A_{n + 1}A0,An+1 和 C1,C2,⋯CnC_1, C_2, \cdots C_nC1,C2,⋯Cn。
现在请你帮忙计算 A1A_1A1 的值。
第二行输入两个数 A0A_0A0 和 An+1A_{n+1}An+1,接着是 nnn 个数据分别是 C1,C2,⋯CnC_1,C_2, \cdots C_nC1,C2,⋯Cn。所有的数据均是两位小数的浮点数。
A2 = 2(A1+C1)-A0 = 2A1+x2;
A3 = 2(A2+C2)-A1 = 3A1+x3
A4 = 2(A3+C3)-A2 = 4A1+x4
An+1 = 2(A3+C3) - An-1 = (n+1)A1 + Xn+1
所以算出Xn+1就可以算出A1,那么我们观察x之间又怎样的递推关系
看A4那个式子,x4等于什么,2A3里面一定包含了2x3然后+2C3,-A2中一定会-x2
所以我么发现Xi+1 = 2*Xi + 2Ci - Xi-1
code:#include <iostream>
#include <cstdio>
using namespace std;
double x[1010];
double c[1010];
int main(){
int n;
cin >> n;
double sum = 0,A0,An1;
cin >> A0 >> An1;
x[0] = A0;
x[1] = 0;
for(int i = 1; i <= n; i++){
cin >> c[i];
x[i+1] = 2.0 * x[i] - x[i-1] + 2.0 * c[i];
}
double ans = (An1 - x[n+1]) / (n + 1);
printf("%.2f\n",ans);
return 0;
}
对于一个含有 n+2n+2n+2 个元素的数列,A0,A1,⋯AnA_0, A_1, \cdots A_nA0,A1,⋯An,满足这样的递归公式Ai=Ai−1+Ai+12−Ci 1≤i≤n\displaystyle A_i = \frac
4000
{A_{i-1} + A_{i + 1}}{2} - C_i\ \ \ 1 \le i \le nAi=2Ai−1+Ai+1−Ci 1≤i≤n
现在我们知道 A0,An+1A_0, A_{n + 1}A0,An+1 和 C1,C2,⋯CnC_1, C_2, \cdots C_nC1,C2,⋯Cn。
现在请你帮忙计算 A1A_1A1 的值。
输入格式
第一行输入一个整数 n(1≤n≤1000)n(1 \le n \le 1000)n(1≤n≤1000)。第二行输入两个数 A0A_0A0 和 An+1A_{n+1}An+1,接着是 nnn 个数据分别是 C1,C2,⋯CnC_1,C_2, \cdots C_nC1,C2,⋯Cn。所有的数据均是两位小数的浮点数。
输出格式
输出 A1A_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把公式化简可得Ai+1 = 2(Ai+Ci)-Ai-1
A2 = 2(A1+C1)-A0 = 2A1+x2;
A3 = 2(A2+C2)-A1 = 3A1+x3
A4 = 2(A3+C3)-A2 = 4A1+x4
An+1 = 2(A3+C3) - An-1 = (n+1)A1 + Xn+1
所以算出Xn+1就可以算出A1,那么我们观察x之间又怎样的递推关系
看A4那个式子,x4等于什么,2A3里面一定包含了2x3然后+2C3,-A2中一定会-x2
所以我么发现Xi+1 = 2*Xi + 2Ci - Xi-1
code:#include <iostream>
#include <cstdio>
using namespace std;
double x[1010];
double c[1010];
int main(){
int n;
cin >> n;
double sum = 0,A0,An1;
cin >> A0 >> An1;
x[0] = A0;
x[1] = 0;
for(int i = 1; i <= n; i++){
cin >> c[i];
x[i+1] = 2.0 * x[i] - x[i-1] + 2.0 * c[i];
}
double ans = (An1 - x[n+1]) / (n + 1);
printf("%.2f\n",ans);
return 0;
}
相关文章推荐
- 计蒜客-数列求值
- [BZOJ1485] [HNOI2009]有趣的数列 && 找规律 + 数学
- 数学札记——读《Fibonacci 数列与黄金分割》后感
- BZOJ 2326 HNOI 2011 数学作业 矩阵乘法求数列第n项
- [再寄小读者之数学篇](2014-05-25 非线性递归数列的敛散性)
- 数学答案(数列、极限、数学归纳法)-[仅供内部参考]
- 基本数学概念——数列
- 高等数学:第一章 函数与极限(1)函数 数列极限 函数极限
- 斐波那契数列的求值问题
- BZOJ3142 [Hnoi2013]数列 【组合数学】
- BZOJ3142 HNOI2013数列(组合数学)
- 计蒜客 嘟嘟数列——构造矩阵
- [BZOJbegin][NOIP十连测第九场]小P的单调数列(数学相关+dp+bit)
- 栈---定义、应用(递归、后缀表达式实现数学表达式求值)
- 计蒜客17119 Trig Function 数学 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
- 1049数列的片段和(数学问题)
- 再论凭中学数学常识发现中学数学一系列重大错误——数列最起码常识让5千年都无人能识的自然数一下子暴露出来
- 用链表实现栈和队列对简单数学表达式求值
- 数学表达式求值
- 通过Scala面向函数思想,解决高考数学中的压轴数列题