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

C++에서 합이 n인 연속 목록의 수를 세는 프로그램

<시간/>

숫자 n이 있다고 가정하고 합이 n이 되는 양의 연속 값 목록의 수를 찾아야 합니다.

따라서 입력이 n =15와 같으면 출력은 4가 됩니다. 가능한 목록은 [1, 2, 3, 4, 5], [4, 5, 6], [7, 8], 그리고 [15].

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

  • 시작 :=1, 끝 :=1, x :=(n + 1)
  • 합계 :=0
  • 종료 <=x 동안 수행:
    • 합계 :=합 + 끝
    • 합계>=n인 동안 수행:
      • 합계가 n과 같으면 다음과 같습니다.
        • (카운트를 1씩 증가)
      • sum :=합계 - 시작
      • (1부터 시작)
    • (끝을 1씩 증가)
  • 반환 횟수 + 1

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

#include
using namespace std;

int solve(int n) {
   int begin=1,end=1,x=(n+1)/2,count=0;
   long int sum=0;
   while(end <= x){
      sum += end;
      while(sum >= n){
         if(sum == n)
            count++;
         sum -= begin;
         begin++;
      }
      end++;
   }
   return count+1;
}
main(){
   cout << (solve(15));
}

입력

15

출력

4