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

C++에서 연속된 숫자의 합으로 숫자를 표현하는 방법 세기


입력으로 정수 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