입력으로 정수 n이 주어집니다. 목표는 'num'을 두 개 이상의 연속된 자연수의 합으로 나타낼 수 있는 방법의 수를 찾는 것입니다. 예를 들어 n이 3이면 합(1+2)으로 나타낼 수 있으므로 총합은 1입니다.
예를 들어
입력
num=6
출력
Count of ways to express a number as sum of consecutive numbers are: 1
설명
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 1+2+3
입력
num=19
출력
Count of ways to express a number as sum of consecutive numbers are: 1
설명
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 9+10
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -
이 접근 방식에서 우리는 숫자를 ( a + a+1 + a+2…..+ a+i )의 합으로 나타낼 것입니다.
(a)(L+1) 곱하기 + 1+2+3+4…+i =a*(i+1) + i*(i+1)/2가 됩니다. (i 자연수의 합) num=a*(i+1) + i*(i+1)/2.a=[ num − (i)*(i+1)/2 ] / (i+1)
i=1에서 i*(i+1)/2가 num보다 작은 경우 이 작업을 수행합니다.
-
정수를 입력으로 받습니다.
-
sum_consecutive(int num) 함수는 num을 받아 연속된 자연수의 합으로 'num'을 표현하는 방법의 개수를 반환합니다.
-
초기 카운트를 0으로 합니다.
-
임시 변수 res를 float로 가져옵니다.
-
i=1에서 i*(i+1)/2
까지 for 루프 트래버스 사용 -
[ num − (i)*(i+1)/2 ] / (i+1) 값을 계산하고 res에 저장합니다.
-
res가 정수이면 ( res − (int)res 가 0 ) 카운트를 증가시킵니다.
-
마지막에 num이 연속된 자연수의 합으로 표현될 수 있는 방법으로 count가 있습니다.
-
결과로 카운트를 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; int sum_consecutive(int num){ int count = 0; int temp = num * 2; float res; for (int i = 1; i * (i + 1) < temp; i++){ int store = i + 1; res = (1.0 * num−(i * (i + 1)) / 2) / store; float check = res − (int)res; if(check == 0.0){ count++; } } return count; } int main(){ int num = 20; cout<<"Count of ways to express a number as sum of consecutive numbers are: "<<sum_consecutive(num) << endl; return 0; }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -
Count of ways to express a number as sum of consecutive numbers are: 1