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

C++에서 숫자를 여러 부분으로 나누는 방법의 수 세기

<시간/>

양수 N이 주어집니다. 목표는 숫자 N을 3부분으로 나눌 수 있는 방법의 수를 세는 것입니다. 부품은 같을 수도 있고 같지 않을 수도 있습니다. N은 [1,5000] 범위에 있습니다.

숫자의 3개 부분에 대해 3개의 for 루프를 사용하여 이를 수행합니다. 가장 안쪽 루프에서 세 개의 합이 N인지 확인합니다. 참이면 방법의 개수를 늘립니다.

예를 들어 이해합시다.

입력 - N=5

출력 − N을 세 부분으로 나누는 방법의 수:2

설명 − 5는 (1,1,3)과 (1,2,2)의 합으로 표시될 수 있습니다.

입력 - N=9

출력 − N을 세 부분으로 나누는 방법의 수:7

설명 - 9는 (1, 1, 7), (1, 2, 6), (1, 3, 5), (1, 4, 4), (2, 2, 5), ( 2, 3,4) 및 (3, 3, 3).

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 1에서 5000 사이의 값으로 초기화된 정수 N을 사용합니다.

  • DivideN(int n) 함수는 n을 취하여 n을 3부분으로 나눌 수 있는 방법의 수를 반환합니다.

  • 방법의 수에 대해 초기 변수 개수를 0으로 간주합니다.

  • 숫자의 각 부분에 대해 세 개의 for 루프를 사용하여 순회합니다.

  • 1<=i에서 가장 바깥쪽 루프

  • i, j, k의 합이 n인지 확인하십시오. true이면 카운트를 증가시킵니다.

  • 모든 루프의 끝에서 count는 n을 세 부분으로 나누는 방법의 총계를 갖게 됩니다.

  • 카운트를 결과로 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int divideN(int n){
   int count = 0;
   for (int i = 1; i < n; i++){
      for (int j = i ; j < n; j++){
         for (int k = j; k < n; k++){
            int sum=i+j+k;
            if(sum==n)
               { count++; }
         }
      }
   }
   return count;
}
int main(){
   int N=500;
   cout <<endl<< "Number of ways to divide N in 3 parts : "<<divideN(N);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Number of ways to divide N in 3 parts: 20833