Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 연속 숫자 합계

<시간/>

양의 정수 N이 있다고 가정하고 연속적인 양의 정수의 합으로 쓸 수 있는 방법은 몇 가지나 될까요?

따라서 입력이 10과 같으면 출력이 3이 됩니다. 이는 10을 5 + 5 및 7 + 3으로 나타낼 수 있으므로 두 가지 방법이 있기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 렛 :=1

  • i를 초기화하려면:=2, (i를 1만큼 증가) −

    • 합계 :=(i * (i + 1)) / 2

    • 합계> N이면 -

      • 루프에서 나오세요

    • rem :=N - 합계

    • ret :=ret + (rem mod i가 0이면 1, 그렇지 않으면 0)

  • 리턴 렛

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int consecutiveNumbersSum(int N) {
      int ret = 1;
      for(int i = 2; ; i++){
         int sum = (i * (i + 1)) / 2;
         if(sum > N) break;
         int rem = N - sum; ret += (rem % i == 0);
      }
      return ret;
   }
}; main(){
   Solution ob;cout << (ob.consecutiveNumbersSum(10));
}

입력

10

출력

2