1841: so easy!麻麻再也不用担心我的数学了!

Time Limit: 1 Sec Memory Limit: 128 MB Submit: 40 Solved: 17

Description

咱们来一发so easy的数学题,这样麻麻再也不用担心我们的数学不及格了。 现在给你一个方程A[i] = (A[i-1]+A[i+1])/2 - ci;, 然后给你A[0]和A[n+1] 求A[1] = ?。

Input

包括多个测试样例。 对于每一个实例,第一行输入一个正整数n(1 <= n <= 3000),第二行输入两个实数A[0], A[n+1],接下来每一行输入一个实数ci

Output

对于每个测试实例,用一行输出所求得的a1(保留2位小数).

Sample Input

1 50 25 10 2 50 25 10 20

Sample Output

27.50 15.00

是一个比较不容易思考的题。 根据公式:$ Ai = \dfrac{A{i-1}+A{i+1}}{2} - c_i$ 可以得到:$ A{n+1} = 2An -A{n-1} + 2cn$ 所以: $ A_2 = 2A_1 - A_0 + 2c_1$ $ A_3 = 3A_1 - 2A_0 + 4c_1 + 2c_2 = 2A_2 - A_1 + 2c_2$ $ A_4 = 4A_1 - 3A_0 + 6c_1 + 4c_2 + 2c_3$ $ A_5 = 5A_1 - 4A_0 + 8c_1 + 6c_2 + 4c_3 + 2c_4$ …… $ A{n+1} = (n+1)A1 - nA_0 + 2nc_1 + 2(n-1)c_2 +…+ 4c{n-1} + 2cn$ 所以可得 $ A_1 = \dfrac{A{n+1} + nA_0 - \sum_1^n[2(n-i+1)c_i]}{n+1}$ 由此可直接得出结果

#include<stdio.h>
double a[3020];
int main() {
    int n;
    while(scanf("%d",&n)!=EOF) {
        double f0,fn1;
        scanf("%lf %lf",&f0,&fn1);
        for(int i=1; i<=n; i++)
            scanf("%lf",&a[i]);
        double sum=0;
        for(int i=1; i<=n; i++)
            sum+=2*(n-i+1)*a[i];
        printf("%.2lf\n",(fn1+n*f0-sum)/(n+1));
    }
    return 0;
}

题目地址:【郑轻】[1841]so easy!麻麻再也不用担心我的数学了!

© DiDaPiPa all right reserved,powered by GitbookRevision Time: 2020-03-12 21:32:06

results matching ""

    No results matching ""