c# - How can I find out which numbers in a defined set add up to another number? -


i have number 6 , need search inside array of ints if of numbers can added 6.

example:

1,2,3,5,4  

in above array can take 1+2+3 makes 6.

i can take 4+2 6.

the question how find individual numbers can sum number 6.

one possible option list of combinations of items in array, check 1 of has sum of target number.

i found extension method getting combinations here (copied below).

public static ienumerable<t[]> combinations<t>(this ilist<t> arglist, int argsetsize) {     if (arglist == null) throw new argumentnullexception("arglist");     if (argsetsize <= 0) throw new argumentexception("argsetsize must greater 0", "argsetsize");         return combinationsimpl(arglist, 0, argsetsize - 1); }  private static ienumerable<t[]> combinationsimpl<t>(ilist<t> arglist, int argstart, int argiteration, list<int> argindicies = null) {     argindicies = argindicies ?? new list<int>();     (int = argstart; < arglist.count; i++)     {         argindicies.add(i);         if (argiteration > 0)         {             foreach (var array in combinationsimpl(arglist, + 1, argiteration - 1, argindicies))             {                 yield return array;             }         }         else         {             var array = new t[argindicies.count];             (int j = 0; j < argindicies.count; j++)             {                 array[j] = arglist[argindicies[j]];             }              yield return array;         }         argindicies.removeat(argindicies.count - 1);     } } 

now need call number of combinations want in groups. example, if wanted find groups of 2:

list<int> ints = new list<int>() { 1, 2, 3, 4, 5 }; int target = 6;  var combs2 = ints.combinations(2)     .where(x => x.sum() == target); 

this return 1,5 , 2,4. can repeat maximum number of items want in group.


if want results @ once, make new extension method unioning you:

public static ienumerable<t[]> allcombinations<t>(this ilist<t> argslist) {     (int = 1; <= argslist.count; i++)     {         foreach (var combo in argslist.combinations(i))         {             yield return combo;         }     } } 

then can combinations @ once running

var allcombos = ints.allcombinations()     .where(x => x.sum() == target); 

so example, return 1,5, 2,4, , 1,2,3 in 1 collection.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -