蓝桥杯模拟一 数列求值

对于一个含有 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=2Ai1+Ai+1Ci   1in

现在我们知道 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(1n1000)。

第二行输入两个数 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

化简题目给出的公式可以得到 A1 = An+1 + n*A0 - 2*Cn - ... - 2*n*C1
做题的时候注意力不集中,因为中间一个地方把i写成了n,找了半个小时的bug,好痛苦。。。
希望正式考试的时候注意力能集中。

#include<queue>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 1010
#define debug(a) cout << #a << " " << a << endl
using namespace std;
typedef long long ll;
int main() {
    int n;
    cin >> n;
    double x,y;
    cin >> x >> y;
    double c[maxn];
    for( int i = 1; i <= n; i ++ ) {
        cin >> c[i];
    }
    double sum = 0.0;
    sum = y + n * x;
    int j = 1;
    for( int i = n; i >= 1; i -- ) {
        sum = sum - 2 * j * c[i];  //这里i让我写成了n,改了半个小时
        j ++;
    }
    sum = ( sum * 1.0 ) / ( ( n + 1 ) * 1.0 );
    printf("%.2lf
",sum);
    return 0;
}


彼时当年少,莫负好时光。
原文地址:https://www.cnblogs.com/l609929321/p/8660261.html