Description
有一个包括n+2个元素的数列a0, a1, ..., an+1 (n <= 3000, -1000 <= ai <=1000)。它们之间满足ai = (ai-1 + ai+1)/2 - ci (i=1, 2, ..., n)。如今给出a0, an+1, c1, ... , cn.。请编敲代码计算出a1。
Input
输入的第一行是一个整数n。

接下去的两行各自是a0和an+1,(精确到小数点后两位)再接下去的n行是ci(精确到小数点后两位)。每一个数字占一行。

Output
输出a1 ,其格式与 a0 同样。
Sample Input
1

50.50

25.50

10.15
Sample Output
27.85

解题思路:

一開始想用递归来求,但是数据挺大的,n<=3000,所以便想找找当中的规律,看看能不能列出一个算式让a[1]用a[0],a[n+1]和c[1~n]来表示。

首先能够列出下面算式:
2 * a[1] = a[0] + a[2] - 2 * c[1]

2 * a[2] = a[1] + a[3] - 2 * c[2]
......
2 * a[n] = a[n-1] + a[n+1] - 2 * c[n]

等式两边分别相加可得:
2 * (a[1] + ... + a[n]) = (a[0] + ... + a[n-1]) + (a[2] + ... + a[n+1]) - 2 * (c[1] + ... + c[n])

移项后得:
a[1] + a[n] = a[0] + a[n+1] - 2 * (c[1] + ... + c[n])

让下标n从1~n,列出以上算式:
a[1] + a[1] = a[0] + a[2] - 2 * c[1]

a[1] + a[2] = a[0] + a[3] - 2 * (c[1] + c[2])

a[1] + a[n] = a[0] + a[n+1] - 2 * (c[1] + ... + c[n])

等式两边分别相加后得:
(n + 1) * a[1] = n * a[0] + a[n+1] - 2 * (c[1] + (c[1] + c[2]) + ... + (c[1] + c[2] + ... +c[n])) 

AC代码:

#include<stdio.h>
#define MAX_NUM 3005
int main()
{
double a[MAX_NUM], c[MAX_NUM];
int n;
scanf("%d", &n);
scanf("%lf%lf", &a[0], &a[n+1]);
for(int i = 1; i <= n; i++)
scanf("%lf", &c[i]);
int j = 1;
double sum_1 = 0, sum_2 = 0;
for(int i = 1; i <= n ; i++)
{
for(; j <= i; j++)
{
sum_1 += c[j];
}
sum_2 += sum_1;
}
a[1] = (n * a[0] + a[n + 1] - 2 * sum_2) / (n + 1);
printf("%.2lf\n", a[1]);
return 0;
}

最新文章

  1. php的http_build_query使用
  2. Rust初步(五):Rust与C#性能比较
  3. C 语言学习的第 05 课:了解课程配套的平台
  4. BizTalk 开发系列(四十) BizTalk WCF-SQL Adapter读取SQL Service Broker消息
  5. Android WebView 实现缓存网页数据
  6. typeid详解
  7. 企业需要k2来解放孤岛危机
  8. &#39;dict&#39; object has no attribute &#39;a&#39;
  9. C# 3.0 特性之扩展方法
  10. jrae源码解析(二)
  11. 使用安卓中的TextToSpeech控件实现朗读文字
  12. WCF编写时候的测试
  13. 【XML】document.createEvent的使用方法
  14. CVE-2017-8464远程命令执行漏洞(震网漏洞)复现
  15. OpenGL中怎么把世界坐标系变成屏幕坐标系
  16. JDK--box和unbox
  17. 2018-2019-2 网络对抗技术 20165319 Exp2 后门原理与实践
  18. Xaml Controls Gallery 的五个没有用的控件
  19. Rime 小狼毫 注意事项
  20. 对如下字符串(234453)[234]{2324}分析它的括号使用是否正确,括号匹配(Java实现)

热门文章

  1. 10,*args **kwargs 函数的命名空间。
  2. 大数据学习——本地安装redis
  3. P2341 受欢迎的牛
  4. API错误码设计-资料
  5. 【二叉搜索树】poj 1577 Falling Leaves
  6. 【2018.10.10】[HNOI2008] GT考试(bzoj1009)
  7. JSP学习笔记(七十八):struts2中s:select标签的使用
  8. Linux(7):用户管理
  9. Java面试题集(一)
  10. Linux java 启动脚本