Java例题_20 前20项之和!
1 /*20 【程序 20 求前 20 项之和】
2 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和。
3 程序分析:请抓住分子与分母的变化规律。
4
5 */
6
7 /*分析
8 * 前一个数的分子就是后一个数的分母
9 * 无论分子分母,第三个的值都等于第一个加第二个
10 * 一 二 三 四 五。。。。
11 * 分子 2 3 5 8 13
12 * 分母 1 2 3 5 8 13
13 * ====================
14 * 1、利用找到的规律生成分子和分母分别存入两个不同的数组S[]和M[]
15 * 2、S[0]乘以M[1]存入S[0],再将S[1]和M[1]分别乘以M[0]并分别存入S[1]和M[1],再将S[0]乘以S[1]后存入S[0],则S[0]/M[1]就是钱两项和了
16 * 3、重复以上
17 * */
18
19 package homework;
20
21 public class _20 {
22
23 public static void main(String[] args) {
24 // TODO Auto-generated method stub
25 int s[]=new int[20]; //分子
26 int m[]=new int[20]; //分母
27 //生成分子分母
28 s[0]=2; s[1]=3;
29 m[0]=1; m[1]=2;
30 for (int i = 2; i < 20; i++) {
31 s[i]=s[i-1]+s[i-2];
32 m[i]=m[i-1]+m[i-2];
33 }
34 //==============测试分子分母的值==========================
35 // for (int i = 0; i < m.length; i++) {
36 // System.out.print(s[i]+"\t");
37 // }
38 // System.out.println();
39 // for (int i = 0; i < m.length; i++) {
40 // System.out.print(m[i]+"\t");
41 // }
42 //====================================================
43
44 // =====================long类型的范围都不够===查网上发现大家都是用的小数!!!!!!
45 //分别将每一项通分后相加,并存入s[0]和m[0]中
46 // for (int i = 1; i < m.length; i++) {
47 // s[0]=s[0]*m[i]; //分子1
48 // m[0]=m[0]*m[i]; //分母
49 // s[i]=s[i]*m[0]; //分子2
50 // s[0]=s[0]+s[i]; //分子1+分子2
51 // }
52 // System.out.println("该数列前20项之和为:"+s[0]+"/"+m[0]);
53 //
54 double x=(double)s[0]/(double)m[0];
55 for (int i = 1; i < m.length; i++) {
56 x=x+(double)s[i]/(double)m[i];
57
58 }
59 System.out.printf("%.2f",x);
60
61 }
62 }