Vladislav_Bezruk

Sport Prog Sum

Nov 2nd, 2021 (edited)
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. #define N 4
  7. #define X 7
  8.  
  9. int nums[] = {5, 3, 4, 7};
  10.  
  11. bool canSum(int x, int* nums, int n, int i) {
  12.     if (x == 0) return true;
  13.     if (x < 0 || i >= n) return false;
  14.  
  15.     for (int k = 0; k <= x / nums[i]; k++)
  16.         if (canSum(x - k * nums[i], nums, n, i + 1))
  17.             return true;
  18.     return false;
  19. }
  20.  
  21. int howManySum(int x, int* nums, int n, int i) {
  22.     if (x == 0) return 1;
  23.     if (x < 0 || i >= n) return 0;
  24.  
  25.     int sum = 0;
  26.     for (int k = 0; k <= x / nums[i]; k++)
  27.         sum += howManySum(x - k * nums[i], nums, n, i + 1);
  28.     return sum;
  29. }
  30.  
  31. void combinationSum(int x, int* nums, int n, int i, int* comb, int s) {
  32.     if (x == 0) {
  33.         cout << "combination: ";
  34.         for (int i = 0; i < s - 1; i++)
  35.             cout << comb[i] << " + ";
  36.         cout << comb[s - 1] << endl;
  37.         return;
  38.     }
  39.     if (x < 0 || i >= n) return;
  40.  
  41.     for (int k = 0; k <= x / nums[i]; k++) {
  42.         if (k) comb[s++] = nums[i];
  43.         combinationSum(x - k * nums[i], nums, n, i + 1, comb, s);
  44.     }
  45. }
  46.  
  47. int getMin(int arr[], int n) {
  48.     int min = arr[0];
  49.  
  50.     for (int i = 1; i < n; i++)
  51.         if (min > arr[i]) min = arr[i];
  52.     return min;
  53. }
  54.  
  55. int main() {
  56.  
  57.     cout << "canSum = " << canSum(X, nums, N, 0) << endl;
  58.  
  59.     cout << "howManySum = " << howManySum(X, nums, N, 0) << endl;
  60.  
  61.     int comb[X / getMin(nums, N) + 1];
  62.  
  63.     combinationSum(X, nums, N, 0, comb, 0);
  64.  
  65.     return 0;
  66. }
Add Comment
Please, Sign In to add comment