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 - c[i](1 <= i <= n);, 然后给你A[0]和A[n+1]
求A[1] = ?。
Input
包括多个测试样例。
对于每一个实例,第一行输入一个正整数n(1 <= n <= 3000),第二行输入两个实数A[0], A[n+1],接下来每一行输入一个实数c[i](1 <= i <= n)。
Output
对于每个测试实例,用一行输出所求得的a1(保留2位小数).
Sample Input
1
50 25
10
2
50 25
10 20
Sample Output
27.50
15.00
是一个比较不容易思考的题。
根据公式:
Ai=Ai−1+Ai+12−ci
可以得到:
An+1=2An−An−1+2cn
所以:
A2=2A1−A0+2c1
A3=3A1−2A0+4c1+2c2=2A2−A1+2c2
A4=4A1−3A0+6c1+4c2+2c3
A5=5A1−4A0+8c1+6c2+4c3+2c4
……
An+1=(n+1)A1−nA0+2nc1+2(n−1)c2+…+4cn−1+2cn
所以可得
A1=An+1+nA0−∑n1[2(n−i+1)ci]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;
}