📖 Scenario: You are helping a chef who wants to create special dishes by combining ingredients. Each ingredient has a unique number representing its flavor strength. The chef wants to find all possible combinations of ingredients that add up exactly to a target flavor strength K.
🎯 Goal: Build a program that finds and prints all unique combinations of numbers from a given list that sum up to K. Each number can be used only once in each combination.
📋 What You'll Learn
Create an array called ingredients with the exact values: 2, 3, 6, 7
Create an integer variable called K and set it to 7
Write a recursive function called findCombinations that finds all unique combinations of ingredients that sum to K
Print each combination on a separate line with numbers separated by spaces
💡 Why This Matters
🌍 Real World
Finding combinations of items that meet a specific total is useful in meal planning, budgeting, and resource allocation.
💼 Career
This problem teaches recursion and backtracking, which are important for algorithm design and problem solving in software development.
Progress0 / 4 steps
1
Create the ingredients array
Create an integer array called ingredients with the exact values 2, 3, 6, 7 and an integer n that stores the number of elements in ingredients.
DSA C
Hint
Use int ingredients[] = {2, 3, 6, 7}; and int n = 4; to store the array and its size.
2
Set the target sum K
Create an integer variable called K and set it to 7.
DSA C
Hint
Use int K = 7; to set the target sum.
3
Write the recursive function to find combinations
Write a recursive function called findCombinations with parameters int start, int target, int combination[], and int combSize. This function should find all unique combinations of ingredients starting from index start that sum to target. Use a for loop with int i = start; i < n; i++ to explore choices. When target == 0, print the current combination. Avoid using the same element twice in the same position by skipping duplicates.
DSA C
Hint
Use recursion with a for loop starting at start. When target == 0, print the combination.
4
Call the function and print all combinations
In the main function, create an integer array called combination with size n. Call findCombinations with arguments 0, K, combination, and 0. Return 0 from main. This will print all combinations that sum to K.
DSA C
Hint
In main, create int combination[4]; and call findCombinations(0, K, combination, 0);.
Practice
(1/5)
1. What is the main goal of the Generate All Combinations Sum K problem?
easy
A. Count the total number of elements in an array
B. Sort an array of numbers in ascending order
C. Find the maximum number in an array
D. Find all unique combinations of numbers that add up to a target sum K
Solution
Step 1: Understand the problem statement
The problem asks to find all unique sets of numbers that add up exactly to a given sum K.
Step 2: Identify the goal
The goal is to generate all possible combinations, not just one or count elements.
Final Answer:
Find all unique combinations of numbers that add up to a target sum K -> Option D
Quick Check:
Combination sum = find all sets adding to K [OK]
Hint: Focus on combinations that sum exactly to K [OK]
Common Mistakes:
Confusing combination sum with sorting
Looking for maximum instead of combinations
Counting elements instead of sums
2. Which of the following is the correct way to start a recursive function header in C for generating combinations that sum to K from an array arr of size n?
easy
A. void generate(int arr[], int n, int target, int start, int currentSum, int combination[], int combSize)
B. int generate(int arr, int n, int target, int start, int currentSum, int combination[], int combSize)
C. void generate(int arr, int n, int target, int start, int currentSum, int combination[], int combSize)
D. int generate(int arr[], int n, int target, int start, int currentSum, int combination[], int combSize)
Solution
Step 1: Check parameter types for array and function return
In C, arrays are passed as int arr[] and recursive functions for generating combinations usually return void.
Step 2: Verify function signature correctness
void generate(int arr[], int n, int target, int start, int currentSum, int combination[], int combSize) correctly uses void return type and int arr[] for the array parameter.
Final Answer:
void generate(int arr[], int n, int target, int start, int currentSum, int combination[], int combSize) -> Option A
Quick Check:
Correct C syntax for recursive combination function [OK]
Hint: Use void return and array as int arr[] in C [OK]
Common Mistakes:
Using int instead of int[] for array parameter
Returning int instead of void for recursive function
Missing array brackets in parameter
3. What will be the output combinations for the array [2, 3, 6, 7] and target sum 7 using combination sum logic?
medium
A. [[7], [2, 2, 3]]
B. [[7], [3, 4]]
C. [[2, 3, 6], [7]]
D. [[2, 2, 3], [6, 1]]
Solution
Step 1: Identify valid combinations summing to 7
From the array, 7 alone is valid. Also, 2+2+3 = 7 is valid. 3+4 is invalid as 4 is not in array. 6+1 invalid as 1 not in array.
Step 2: Confirm combinations
Valid combinations are [7] and [2, 2, 3].
Final Answer:
[[7], [2, 2, 3]] -> Option A
Quick Check:
Sum 7 from array = [7], [2,2,3] [OK]
Hint: Check sums only from given array elements [OK]
Common Mistakes:
Including numbers not in the array
Ignoring repeated elements allowed
Mixing invalid sums
4. Given the following snippet, what is the bug that prevents correct generation of combinations summing to K?
void generate(int arr[], int n, int target, int start, int currentSum, int combination[], int combSize) {
if (currentSum == target) {
// print combination
return;
}
for (int i = start; i < n; i++) {
if (currentSum + arr[i] <= target) {
combination[combSize] = arr[i];
generate(arr, n, target, i, currentSum + arr[i], combination, combSize + 1);
}
}
}
medium
A. Incorrect base case condition for currentSum == target
B. Loop should start from 0 instead of start
C. Missing backtracking step to remove last element after recursion
D. Function should return int instead of void
Solution
Step 1: Analyze recursion and combination building
The function adds elements to combination but never removes them after recursion, causing incorrect combinations.
Step 2: Identify missing backtracking
Backtracking requires removing last added element after recursive call to explore other paths.
Final Answer:
Missing backtracking step to remove last element after recursion -> Option C
Quick Check:
Backtracking needs element removal after recursion [OK]
Hint: Always remove last element after recursive call [OK]
Common Mistakes:
Not removing last element after recursion
Wrong base case check
Loop starting index error
5. You want to generate all unique combinations from array [1, 2, 3] that sum to 4. Which of the following modifications ensures no duplicate combinations appear when numbers can be reused multiple times?
hard
A. Sort the array and skip duplicates by checking if current element equals previous
B. In recursive calls, pass i as start index to allow reuse and avoid duplicates
C. In recursive calls, always pass 0 as start index to restart from beginning
D. Use a global visited array to mark elements used
Solution
Step 1: Understand reuse and duplicates in combinations
Allowing reuse means next recursion starts from current index i, not 0, to avoid duplicate sets in different orders.
Step 2: Identify correct start index usage
Passing i as start index allows reuse and prevents duplicates by not revisiting earlier elements.
Final Answer:
In recursive calls, pass i as start index to allow reuse and avoid duplicates -> Option B
Quick Check:
Start index = i to reuse and avoid duplicates [OK]
Hint: Pass current index as start to reuse elements [OK]
Common Mistakes:
Restarting from 0 causing duplicates
Using visited array unnecessarily
Not sorting or skipping duplicates properly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.