숫자 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부터 시작)
- 합계가 n과 같으면 다음과 같습니다.
- (끝을 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