-6

how can we find out different combination of the elements of an array using c# code. are there any inbuilt library function for this.?

for eg: suppose an array has elements {2,3,4,5,6,7} then the possible combination would be 2,3,4,5,6,7,2 3,2 3 4,2 3 4 5, etc

so basically wat i need is a function which gives different combination based on its input for eg: comb(array,2) gives output 2 3,1 2,3 4 and comb(array,3) gives output 1 2 3,2 3 4,3 4 5 and so on

Eg: valid comnbination for array= {1, 2, 3} and length = 2 are 1 2,1 3,2 3 .....

15
  • 3
    What combinations do you want? Commented Oct 4, 2011 at 6:11
  • What do you mean by "combination"? Do you mean all "combinations"where elements in a different order are considered the same and all elements of the array are "combined" as their own arrays? Commented Oct 4, 2011 at 6:13
  • What do you actually mean with "different combination"? Commented Oct 4, 2011 at 6:13
  • 2
    Are you looking for permutations? stackoverflow.com/questions/1272828/… Commented Oct 4, 2011 at 6:13
  • 2
    (Downvoted for lack of clarity, by the way. If you clarify the question, I'll happily remove the downvote. At the moment, the question can't really be answered with any confidence that the answer will satisfy what you're actually trying to do.) Commented Oct 4, 2011 at 6:14

2 Answers 2

2
static void Main()
{
    var cnk = comb(new [] {1,2,3},2);
    foreach ( var c in cnk)
    {
    }
}

public static IEnumerable<int[]> comb(int[] a, int k)
{
    if (a == null || a.Length == 0 || k < 1 || k > a.Length)
        yield break;

    int n = a.Length;   
    // 1
    if ( k == 1)
        for ( int i = 0; i < n; i++)
        {   
            yield return new int[] {a[i]};
        }
    else
        {
            // k
            for ( int i = 0; i < n - k + 1; i++)
            {
                var res = new int[k];
                    for (int t = i, c = 0; t < i + k - 1; t++, c++)                 
                        res[c] = a[t];              
                for (int j = i + k - 1; j < n; j++)
                {                                                               
                    res[k-1] = a[j];                    
                    yield return res;
                }
            }
        }
}

You should take the algorithm from here, my answer doesn't solve your problem Algorithm to return all combinations of k elements from n

Sign up to request clarification or add additional context in comments.

Comments

0

Seemed logic is not absolutely correct as:

var cnk = comb(new[] { 1, 2, 3, 4 }, 3);

This gives 3 variants, but as a matter of fact it is 4:

1 2 3
1 2 4
1 3 4
2 3 4

I guess comb is better to be implemented in recursive way.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.