求有多少种连续的正数序列的和为num,num为一个正整数(2) 牛客题目为: 求和为S的连续正数序列

题目:

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

N由于 sum=数组中间数的值*数组个数,当一个数组的个数为N时,数组中的可能的最小中间数的值位为N/2,已经知道N/2*N=sum;所以N即数组中最大可能的数组的个数为 (sum*2)开平方根

代码表示为:

 double N = Math.sqrt(sum*2);

修改后的代码: 

 public static ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
        double number;
        int n;
        int resNum;
        double N = Math.sqrt(sum*2);
         System.out.println(N);
        for (int i = (int) N; i >=2; i--) {
            number = sum / (double) i;
            //System.out.println("number="+number);
            if (i % 2 == 0) {
                double a = Math.floor(number + 1) + Math.floor(number);
                //System.out.println("a="+a);
                ArrayList<Integer> oneRes = new ArrayList<Integer>();
                if ((2 * number) == (a) && Math.floor(number) != number) {
                    n = i;
                    resNum = (int) number - (i / 2 - 1);
                    do {
                        oneRes.add(resNum);
                        n -= 1;
                        resNum += 1;
                    } while (n > 0);
                    res.add(oneRes);
                }
            } else {
                number = sum / (double) i;
                if (number == Math.floor(number)) {
                    ArrayList<Integer> oneRes = new ArrayList<Integer>();
                    //System.out.println("number="+number);
                    n = i;
                    resNum = (int) number - (i / 2);
                    do {
                        oneRes.add(resNum);
                        resNum += 1;
                        n -= 1;
                    } while (n > 0);
                    res.add(oneRes);
                }
            }
        }
        return res;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章