숫자 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