Advertisement
stefkay

06.FindSubsetSums

Aug 20th, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.61 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. class FindSubsetSums
  8. {
  9. static void Main()
  10. {
  11.     int n = int.Parse(Console.ReadLine());
  12.     string[] inputNums = Console.ReadLine().Split(' ');
  13.  
  14.     List<int> numbers = new List<int>();
  15.  
  16.  
  17.     for (int i = 0; i < inputNums.Length; i++)
  18.     {
  19.         numbers.Add(int.Parse(inputNums[i]));
  20.     }
  21.  
  22.     int subsetsNumber = (int)Math.Pow(2, numbers.Count);
  23.        
  24.     HashSet<List<int>> allSets = new HashSet<List<int>>();
  25.     List<int> subset = new List<int>();
  26.  
  27.  
  28.         for(int i = 0; i < subsetsNumber; i++)
  29.         {
  30.             int pos = numbers.Count - 1;
  31.             int bitmask = i;
  32.  
  33.                
  34.             while (bitmask > 0)
  35.             {
  36.                 if ((bitmask & 1) == 1)
  37.                 {
  38.                     subset.Add(numbers[pos]);
  39.                 }
  40.                 bitmask >>= 1;
  41.                 pos--;
  42.             }
  43.             allSets.Add(new List<int>(subset));
  44.             subset.Clear();
  45.  
  46.         }
  47.         foreach (List<int> list in allSets)
  48.         {
  49.             if (list.Sum() == n)
  50.             {
  51.                 foreach (int num in list)
  52.                 {
  53.                     if (list.IndexOf(num) != list.Count - 1)
  54.                     {
  55.                         Console.Write(num + " + ");
  56.                     }
  57.                     else
  58.                     {
  59.                         Console.Write(num);
  60.                     }
  61.                 }
  62.                 Console.WriteLine(" = {0}", n);
  63.             }
  64.         }
  65.          
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement