HDU 2086 A=? 数学题

题目描述:有一个公式,Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n).,如果给出A0, An+1, 和 C1, C2, .....Cn要你计算出A1是多少。

解题报告:一个简单的数学题,我的做法先将公式变形得到:A[n] = 2*A[n-1]+2*C[n-1]-A[n-2],是分别定义两个数组,设A1 = x,然后两个数组里面一个存放第n项的系数,另一个存放第n项的常数,这样一直递推到第n+1项,然后直接解一元一次方程就可以了。代码附上:

 1 #include<cstdio>
 2 #include<cmath>
 3 const int MAX = 3000+5;
 4 int n;
 5 double xishu[MAX],changshu[MAX],C[MAX],a0,an1;
 6 void dabiao() {
 7     xishu[1] = 1;
 8     changshu[1] = 0;
 9     xishu[2] = 2;
10     changshu[2] = 2.0*C[1]-a0;
11     for(int i = 3;i<=n+1;++i) {
12         xishu[i] = 2.0*xishu[i-1]-xishu[i-2];
13         changshu[i] = 2.0*changshu[i-1]+2*C[i-1]-changshu[i-2];
14     }
15 }
16 int main() {
17      while(scanf("%d",&n)!=EOF) {
18          scanf("%lf%lf",&a0,&an1);
19          for(int i = 1;i<=n;++i)
20          scanf("%lf",&C[i]);
21          dabiao();
22          double ans = (an1-changshu[n+1])/xishu[n+1];
23          printf("%.2lf\n",ans);
24      }
25      return 0;
26 }
View Code

 

posted @ 2013-07-26 15:12  xiaxiaosheng  阅读(210)  评论(0编辑  收藏  举报