連続自然数の和


説明:
入力された整数Nが正の整数Nの場合、2つ以上の連続自然数の和で整数Nを表す方法で偽の整数を出力するプログラムを作成します.
N=15の場合.
7+8=15
4+5+6=15
1+2+3+4+5=15
3つのケースがあります.
コード#コード#
public class ContinueNatureNumber {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int input1 = in.nextInt();
        int solution = solution(input1);
        System.out.println(solution);
    }
    public static int solution(int m){
        int answer = 0;
        int sum = 0;
        int lt = 0;
        int n = m/2+1;
        int[] natureNumber = new int[n];
        for(int i=0; i<n; i++){
            natureNumber[i] = i+1;
        }
        for(int rt = 0; rt<n; rt++){
            sum+=natureNumber[rt];
            if(sum == m) answer++;
            while(sum>=m){
                sum-=natureNumber[lt++];
                if(sum==m) answer++;
            }
        }
        return answer;
    }
}
前回の問題とあまり差がない.前回の質問で、指定した配列内で配列を検索した場合は、今回は自分で自然数の配列を作成するべきです.しかしここでは数学の方法で2つ以上の自然数の和例えば、例題中の15は、自然数1~15から2つ以上の自然数の和の条件を満たすために、7,8を超える数字から意味が消え、連続する自然数の和は、8,9ではすでに15を超えているので、以上の数字は意味がありません.コードを見てみると、natureNumberの配列のサイズは、私たちが指定した値mに従って、/2を1つの数に+1のサイズを加えて自然数の配列を作成するように設定されています.もちろん、そうしなくても問題を解くことができますが、効率を上げるためには、このような数学の常識を知っておくと役に立ちます..君は数学をよく勉強すべきだ.
それ以外に、前回の問題と同じように、これ以上説明する必要はないようです.
連続自然数の2つ以上の和が分かれば、なかなか解けません.