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

C++에서 합이 M으로 나눌 수 있도록 부호를 변경하여 N 요소의 모든 조합을 인쇄합니다.

<시간/>

이 문제에서는 N개의 요소 배열이 제공됩니다. 그리고 모든 요소의 합은 정수 M으로 나눌 수 있어야 합니다.

Input : array = {4, 7, 3} ; M = 3
Output : 5+4+3 ; 5+4-3

이 문제를 해결하려면 얻을 수 있는 모든 합을 찾는 데 사용할 수 있는 거듭제곱 집합의 개념을 알아야 합니다. 이 합계에서 M으로 나누어지는 모든 것을 출력하십시오.

알고리즘

Step 1: Iterate overall combinations of ‘+’ and ‘-’ using power set.
Step 2: If the sum combination is divisible by M, print them with signs.

예시

#include <iostream>
using namespace std;
void printDivisibleSum(int a[], int n, int m){
   for (int i = 0; i < (1 << n); i++) {
      int sum = 0;
      int num = 1 << (n - 1);
      for (int j = 0; j < n; j++) {
         if (i & num)
            sum += a[j];
         else
            sum += (-1 * a[j]);
         num = num >> 1;
      }
      if (sum % m == 0) {
         num = 1 << (n - 1);
         for (int j = 0; j < n; j++) {
            if ((i & num))
               cout << "+ " << a[j] << " ";
            else
               cout << "- " << a[j] << " ";
            num = num >> 1;
         }
         cout << endl;
      }
   }
}
int main(){
   int arr[] = {4,7,3};
   int n = sizeof(arr) / sizeof(arr[0]);
   int m = 3;
   cout<<"The sum combination divisible by n :\n";
   printDivisibleSum(arr, n, m);
   return 0;
}

출력

합계 조합은 n −

로 나눌 수 있습니다.
- 4 + 7 - 3
- 4 + 7 + 3
+ 4 - 7 - 3
+ 4 - 7 + 3