이 문제에서는 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