黑马程序员技术交流社区

标题: 2/1+3/2+5/3+8/5+13/8.......... [打印本页]

作者: 龙哮天    时间: 2017-3-30 22:02
标题: 2/1+3/2+5/3+8/5+13/8..........
/*
* 序列:2/1,3/2,5/3,8/5,13/8,21/13...
* 定义一个方法求出这个数列的前20 项之和
* 分析:
* 前2项 2/1+3/2 =4/2+3/2=7/2
* 前3项 7/2+5/3=21/6+10/6=31/6
* 前4项31/6+8/5=155/30+48/30=203/30
* 前5项203/30+13/8=1624/240+390/240=2014/240
* arrmu[0]=1   arrzi[0]=2
* arrmu[1]=2   arrzi[1]=3
* arrmu[2]=3   arrzi[2]=5
* arrmu[3]=5   arrzi[8]=8
*
* eclipse能够运算分数+分数
* 定义二维数组接收分子,分母,array[偶数][0]=分子,array[奇数][1]=分母
*   
*/
public class Demo09_New {

        public static void main(String[] args) {
                // 定义前多少项
                int count = 20;
                // 调用value赋值方法;和运算方法
                //用result()直接接收value(20)返回的数组arr[][]
                result(value(20));
        }

        // 方法value 用于对输入array[][]进行赋值;
        // 形参为int count多少项,返回值为array[][];
        public static int[][] value(int count) {
                // 定义数组arr[][],二维数组每个元素的长度都为2;并且索引为0和1,
                // int[count][0]接收分子;int[count][1]接收分母;
                int[][] arr = new int[count][2];
                // 如果a=1,则结果为2/1
                if (count == 1) {
                        arr[0][0] = 2;// 第一项的分子为2;
                        arr[0][1] = 1;// 第一项的分母为1;
                        System.out.println("结果为" + 2);
                } else if (count == 2) {
                        arr[0][0] = 2;// 第一项的分子为2;
                        arr[0][1] = 1;// 第一项的分母为1;
                        arr[1][0] = 3;// 第二项的分子为2;
                        arr[1][1] = 2;// 第二项的分母为1;
                        System.out.println("结果为" + 3.5);
                } else if (count > 2) {
                        arr[0][0] = 2;// 第一项的分子为2;
                        arr[0][1] = 1;// 第一项的分母为1;
                        arr[1][0] = 3;// 第二项的分子为2;
                        arr[1][1] = 2;// 第二项的分母为1;
                        for (int x = 3; x < arr.length+1; x++) {
                                arr[x - 1][0] = arr[x - 2][0] + arr[x - 2][1];// 第三项的分子=前一项的分子+前一项的分母;
                                arr[x - 1][1] = arr[x - 2][0];// 第三项的分母=前一项 的分子;
                        }
                }
//                for(int a=0;a<arr.length;a++){
//                        System.out.println(arr[a][0]+"  "+arr[a][1]);
//                }
                return arr;
        }

        // 方法result 计算
        // 形参为数组array[][],没有返回值
        public static void result(int[][] array) {
                // 变量为double类型的sum,用于接收运算结果;
                double sum = 0;
                // 运算法则是sum+=分子/分母
                for (int a = 0; a < array.length; a++) {
                        // 分子/分母
                        sum += (array[a][0] * 1.0 )/ (array[a][1]);
                }
                System.out.println(sum);
        }
作者: qinyi    时间: 2017-3-30 22:43
这都是神马
作者: leijia    时间: 2017-3-30 23:45
写的真好!!!

作者: 看看你们情况    时间: 2017-3-31 01:27
你要学会分析  前一项的分子分母的和是下一项的分子  前一项的分子是下一项的分母

作者: 17631331017    时间: 2017-4-1 11:04
前一项的分子分母的和是下一项的分子  前一项的分子是下一项的分母





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2