輸入一個正數 n,輸出所有和為 n 連續正數序列。 java實現


用了半小時才寫出來啊,

其實這種思路應用范圍很廣,利用有序性這個特點,比如本體只要是有序就行,例如兩個集合是有序的,求交集,有序數組的查找,有序數組的歸並,有序有了優化的可能。

輸入一個正數 n,輸出所有和為 n 連續正數序列
        例如輸入 15,由於 1+2+3+4+5=4+5+6=7+8=15,所以輸出 3 個連續序列 1-5、4-6 和 7-8。
        分析:我們用兩個數small和big分別表示序列的最小值和最大值。首先把small初始化為 1,big初始化為 2。如果從small到big的序列的和大於n的話,我們向右移動small,相當於從序列中去掉較小的數字。如果從small到big的序列的和小於n的話,我們向右移動big,相當於向序列中添加big的下一個數字。一直到small等於(1+n)/2,因為序列至少要有兩個數字。

package 連續和為n;

import java.util.ArrayList;

public class Main {
    //輸出一到n中連續和為n的正整數
    public static  void getAns(int n)
    {
       int beg=1;
       int sum=1;
       int cur=1;
         
        while(beg<=n/2+1)
        {
            
            if(sum==n)
            {
                for(int k=beg;k<=cur;k++)
                {
                    System.out.print(k+" ");
                }
                System.out.println();
                sum=sum-beg;
                beg++;
                cur++;
                sum+=cur;
                
            }
             if(sum>n)
            {
                
               sum=sum-beg;
               beg++;
                
            }
             else
             {
             cur++;
             sum+=cur;
             }
            // System.out.println("beg"+beg+"cur"+cur+"sum"+sum);
            
            
        }
        
        
        
    }

    public static void main(String[] args) {
        getAns(15);
        

    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM