A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 2015竹林风 中级黑马   /  2015-11-7 14:21  /  450 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
这道题的思想是什么,怎么做呢?

  

8 个回复

倒序浏览
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 ArrayList<Integer> al = new ArrayList<Integer>();
  4.                 for(int x = 1;x<=21;x++){
  5.                         if(x<3){
  6.                                 al.add(x);
  7.                         }
  8.                         else
  9.                                 al.add((al.get(x-3)+al.get(x-2)));
  10.                 }
  11.                 int sum = 0;
  12.                 for(int x = 1;x<al.size();x++){
  13.                         int i = al.get(x);
  14.                         int n = al.get(x-1);
  15.                         sum+=i/n;
  16.                         System.out.println(i+"/"+n+"="+(i/n));
  17.                        
  18.                 }
  19.                 System.out.println(sum);
  20.         }
  21. }
复制代码
回复 使用道具 举报 1 0
代码能给全吗
回复 使用道具 举报
看除数和被除数 都是有规律的  可以作为两个数组,这个序列就是两个数组同样索引相除,就是这样了
回复 使用道具 举报

import java.util.Scanner;

public class Array_sum_double {

        /**
         * 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
         */
        public static void main(String[] args) {
                System.out.println("请输入要求出多少个数的和:");
                Scanner sc = new Scanner(System.in);
                int num = sc.nextInt();
                System.out.print("除数为:\t\t");
                print_int(getNum_cs(num));
                System.out.println();
                System.out.print("被除数为:\t");
                print_int(getNum_bcs(num));
                System.out.println();
                System.out.print("数列为:\t\t");
                String[] str = num(num);        
                print_String(str);
                System.out.println();
                System.out.print("和为:\t\t");
                System.out.println(sum(num));

        }

        // 求除数和被除数的规律是 (1)(1)2 3 5 8 13 21……
        // 除数从2(索引2-第三个数)开始 被除数从1(索引1-第二个数)
        public static int getNum(int num) {

                if (num == 1) {
                        return 1;
                } else if (num == 2) {
                        return 1;
                } else if (num > 2) {
                        return (getNum(num - 1) + getNum(num - 2));
                } else {
                        return 0;
                }
        }

        // 求除数从索引2(第三个数) 开始
        public static int[] getNum_cs(int num) {
                int[] arr = new int[num];
                for (int i = 1; i <= num + 2; i++) { // 因为有两个数字 用不上
                                                                                                // 要往后跳两个,保证两个索引对应的数字刚好是除数和被除数
                        if (i >= 3) {
                                arr[i - 3] = getNum(i);
                        }
                }
                return arr;
        }

        // 求被除数从索引1 (第二个数) 开始
        public static int[] getNum_bcs(int num) {
                int[] arr = new int[num];
                for (int i = 1; i <= num + 1; i++) { // 因为有一个数字 用不上
                                                                                                // 要往后跳一个,保证两个索引对应的数字刚好是除数和被除数
                        if (i >= 2) {
                                arr[i - 2] = getNum(i);;
                        }
                }
                return arr;
        }

        //算出目标数组的结果
        public static double sum(int count) {
                int[] cs = getNum_cs(count);
                int[] bcs = getNum_bcs(count);
                double db = 0;
                for (int i = 0; i < count; i++) {
                        double d_cs = cs;
                        double d_bcs = bcs;
                        db += d_cs / d_bcs;
                }
                return db;
        }

        // 求出目标数结果的显示序列
        public static String[] num(int count) {
                int[] cs = getNum_cs(count);
                int[] bcs = getNum_bcs(count);
                String[] str = new String[count];
                for (int i = 0; i < count; i++) {
                        str = cs + "/" + bcs;
                }
                return str;
        }
        
        //数组整数打印
        public static void print_int(int[] arr) {
                System.out.print("[");
                for (int i = 0; i < arr.length; i++) {
                        if (i < arr.length - 1) {
                                System.out.print(arr + "\t");
                        }else {
                                System.out.print(arr);
                        }
                }
                System.out.print("]");
        }
        
        //打印字符串数组
        public static void print_String(String[] str) {
                //System.out.print("[");
                for (int i = 0; i < str.length; i++) {
                        if (i < str.length - 1) {
                                System.out.print(str + "\t");
                        }else {
                                System.out.print(str);
                        }
                }
                //System.out.print("]");
        }
        
}

回复 使用道具 举报

导包没有复制进去,在最上面加上    import java.util.*;
回复 使用道具 举报

这个溜   都不用数组在来麻烦了
回复 使用道具 举报
本帖最后由 ash午夜阳光 于 2015-11-8 08:00 编辑

package generic;

public class XXXXX {
        public static void main(String[] args) {
                for (int i = 1; i <= 20; i++) {
                        System.out.print(getFenZi(i)+"  ");
               
                }
                System.out.println();
                for (int i = 1; i <= 20; i++) {
               
                        System.out.print(getFenMu(i)+"  ");
                }
                System.out.print(getSum(20));
               
        }

        public static int getSum(int n) {
                int sum = 0;
                for (int i = 1; i <= n; i++) {
                        sum += getFenZi(i) / getFenMu(i);
                }
                return sum;
        }

        public static int getFenMu(int n) {
                if (n == -1) {
                        return 0;
                } else if (n == 0) {
                        return 1;
                } else
                        return getFenMu(n - 1) + getFenMu(n - 2);
        }
        public static int getFenZi(int n){
                if (n == -1) {
                        return 1;
                } else if (n == 0) {
                        return 1;
                } else
                        return getFenZi(n - 1) + getFenZi(n - 2);
               
        }

}
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马