求有多少種連續的正數序列的和爲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;
    }

 

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