Advertisement
Guest User

Untitled

a guest
May 5th, 2015
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.86 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. class SortedSubsetSums
  5. {
  6.     static void Main()
  7.     {
  8.         // input
  9.         Console.Write("Enter sum = ");
  10.         int sum = int.Parse(Console.ReadLine());
  11.         Console.WriteLine("Enter numbers separated by a space:");
  12.         int[] numbers = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
  13.         // remove duplicates
  14.         List<int> noDuplicates = numbers.ToList();
  15.         noDuplicates = noDuplicates.Distinct().ToList();
  16.         // generate subsets
  17.         var subsets = from m in Enumerable.Range(0, 1 << noDuplicates.Count)
  18.                       select
  19.                           from i in Enumerable.Range(0, noDuplicates.Count)
  20.                           where (m & (1 << i)) != 0
  21.                           select noDuplicates[i];
  22.         // check subsets' sums and add them to a list
  23.         bool noOutput = true;
  24.         Console.WriteLine("Output:");
  25.         List<List<int>> subsetsSort = new List<List<int>>();
  26.         foreach (var item in subsets)
  27.         {
  28.             int sumTemp = 0;
  29.             List<int> tempList = new List<int>();
  30.             foreach (var number in item)
  31.             {
  32.                 sumTemp += Convert.ToInt32(number);
  33.             }
  34.             if (sumTemp == sum && item.Count() > 0)
  35.             {
  36.                 subsetsSort.Add(item.ToList());
  37.                 noOutput = false;
  38.             }
  39.         }
  40.         // sort list of lists
  41.         foreach (var item in subsetsSort)
  42.         {
  43.             item.Sort();
  44.         }
  45.         subsetsSort = subsetsSort.OrderBy(p => p.Count).ThenBy(p => p[0]).ToList();
  46.         foreach (var item in subsetsSort)
  47.         {
  48.             Console.WriteLine(string.Join(" + ", item) + " = {0}", sum);
  49.         }
  50.         if (noOutput)
  51.             Console.WriteLine("No matching subsets.");
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement