patternMinor
Stuck on a combinations algo question
Viewed 0 times
stuckalgoquestioncombinations
Problem
There are x digits and y boxes where y is between 1 and x inclusive. I have to print all the possible digits in boxes (combinations) in any order.
For examples, if x = 5 and y = 2 we can have the following 4 combinations:
Similarly if x = 5 and y = 3
if x = 5 and y = 5 then there is only 1 combination
Both x and y are variable and I can't figure out even a brute force way of doing this. I have tried using three nested
For examples, if x = 5 and y = 2 we can have the following 4 combinations:
1234 5
123 45
12 345
1 2345Similarly if x = 5 and y = 3
123 4 5
12 34 5
12 3 45
1 234 5
1 23 45
1 2 345if x = 5 and y = 5 then there is only 1 combination
1 2 3 4 5Both x and y are variable and I can't figure out even a brute force way of doing this. I have tried using three nested
for loops but have no luck.Solution
You can print numbers 1 to $x$ and print $y-1$ spaces between them in a brute force manner. The following algorithm does that:
You can call
function enumerate(string str, int s, int t, int y):
/* base case: there is no space left and we print the string */
if (y==0)
string str2 = "";
for i=s to t:
str2.append(i);
print str+str2;
return ;
/* recursive case: add one space and recursively call the function */
for i=s to t:
string str2 = "";
for j=s to i-1:
str2.append(j);
str2.append("~");
if (t-i >= y-1) call enumerate(str+str2, i, t, y-1);You can call
enumerate(str="", s=1, t=5, y=2) to print all combinations of numbers 1 to 5 and 2 spaces between them, which gives you a sorted embedding of numbers 1 to 5 in 3 boxes.Code Snippets
function enumerate(string str, int s, int t, int y):
/* base case: there is no space left and we print the string */
if (y==0)
string str2 = "";
for i=s to t:
str2.append(i);
print str+str2;
return ;
/* recursive case: add one space and recursively call the function */
for i=s to t:
string str2 = "";
for j=s to i-1:
str2.append(j);
str2.append("~");
if (t-i >= y-1) call enumerate(str+str2, i, t, y-1);Context
StackExchange Computer Science Q#71640, answer score: 2
Revisions (0)
No revisions yet.