您的位置:首页 > 编程语言 > Java开发

HDU 2086 A1 = ? (找规律推导公式 + 水题)(Java版)

2017-08-11 17:47 417 查看

Equations

 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086

    ——每天在线,欢迎留言谈论。

题目大意:

   有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n)。
   若给出A0, An+1, 和 C1, C2, .....Cn。
   求 A1 。

思路:

  多写几个例子,找规律推导(抄的)。

感想:

  老啦,老啦,不行了。

Java AC代码:

import java.util.Scanner;
import java.math.*;

public class Main {
static Scanner scn = new Scanner(System.in);
static final int MAXN = 3001;
static double[] c = new double[MAXN];
public static void main(String[] args) {
int n;
double a, b, answer;
while (scn.hasNext()) {
n = scn.nextInt();
a = scn.nextDouble();
b = scn.nextDouble();
for (int i = 1; i <= n; i++) {
c[i] = scn.nextDouble();
}
answer = n * a + b;
for (int i = n; i >= 1; i--) {
answer -= 2 * i * c[n - i + 1];
}
answer /= (n + 1);
System.out.println(String.format("%.2f", answer));
}
System.exit(0);
}
/**
* 因为:Ai=(Ai-1+Ai+1)/2 - Ci,  
     * A1=(A0  +A2  )/2 - C1; 
     * A2=(A1  +  A3)/2 - C2 , ... 
* => A1+A2 = (A0+A2+A1+A3)/2 - (C1+C2) 
     * 2[(A1+A2)+(C1+C2)] = A0+A2+A1+A3; 
     * A1+A2 = A0+A3 - 2(C1+C2); 
   * => A1+A2 =  A0+A3 - 2(C1+C2)  
* 同理可得: 
     * A1+A1 =  A0+A2 - 2(C1)  
     * A1+A2 =  A0+A3 - 2(C1+C2) 
     * A1+A3 =  A0+A4 - 2(C1+C2+C3) 
     * A1+A4 =  A0+A5 - 2(C1+C2+C3+C4) 
     * ... 
     * A1+An = A0+An+1 - 2(C1+C2+...+Cn) 
*----------------------------------------------------- 左右求和 
     *(n+1)A1+(A2+A3+...+An) = nA0 +(A2+A3+...+An) + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)
* 
* => (n+1)A1 = nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn) 
*  
* => A1 = [nA0 + An+1 - 2(nC1+(n-1)C2+...+2Cn-1+Cn)]/(n+1)
*/
}

2017-08-11 17:46:51

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: