Advertisement
GogoK

Zero Subset

Feb 20th, 2015
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.84 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. class ZeroSubset
  5. {
  6.     static void Main()
  7.     {
  8.         Console.WriteLine("Enter 5 integer numbers.");
  9.         int[] numbers = new int[5];
  10.         bool isSubset = true;
  11.  
  12.         for (int i = 0; i < numbers.Length; )
  13.         {
  14.             Console.Write("No {0}:\t", i + 1);
  15.  
  16.             string userInput = Console.ReadLine();
  17.             int number;
  18.  
  19.             if (int.TryParse(userInput, out number))
  20.             {
  21.                 numbers[i] = number;
  22.                 i++;
  23.             }
  24.         }
  25.         Array.Sort(numbers);        // sort by -3, -1, 0, 1, 3
  26.  
  27.         foreach (int i in numbers)
  28.         {
  29.             if (i == 0)
  30.             {
  31.                 Console.WriteLine("{0} + {1} + {2} + {3} + {4} = 0",
  32.                     numbers[0], numbers[1], numbers[2], numbers[3], numbers[4]);
  33.                 return;
  34.             }
  35.         }
  36.  
  37.         // next loop counting (+,- numbers) for arrays.Length
  38.         int plusArray = 0;
  39.         int minusArray = 0;
  40.  
  41.         for (int i = 0; i < numbers.Length; i++)
  42.         {
  43.             if (numbers[i] > 0)
  44.             {
  45.                 plusArray = plusArray + 1;
  46.             }
  47.             else if (numbers[i] < 0)
  48.             {
  49.                 minusArray += 1;
  50.             }
  51.         }
  52.  
  53.         //next loop assigned (+,- numbers) in their arrays
  54.         int[] plusN = new int[plusArray];
  55.         int[] minusN = new int[minusArray];
  56.  
  57.         int countP = 0;
  58.         int countN = 0;
  59.         for (int i = 0; i < numbers.Length; i++)
  60.         {
  61.             if (numbers[i] > 0)
  62.             {
  63.                 plusN[countP] += numbers[i];
  64.                 countP++;
  65.             }
  66.             else if (numbers[i] < 0)
  67.             {
  68.                 minusN[countN] += numbers[i];
  69.                 countN++;
  70.             }
  71.         }
  72.         Array.Reverse(minusN);              // reverse from -5-4-3-2-1 to -1-2-3-4-5
  73.  
  74.         if (plusArray < minusArray)                                 // array Plus lenght ==  small
  75.         {
  76.             int sumP = plusN.Sum();
  77.             int sumN = minusN.Sum();
  78.  
  79.             for (int p = 0; p < plusN.Length; p++)
  80.             {
  81.                 for (int n = 0; n < minusN.Length; n++)
  82.                 {
  83.                     if (plusN[p] + minusN[n] == 0)
  84.                     {
  85.                         Console.WriteLine("{0} + '{1}' = 0", plusN[p], minusN[n]);
  86.                         isSubset = false;
  87.                     }
  88.                     if (plusN[p] + (minusN[p] + minusN[n]) == 0)
  89.                     {
  90.                         Console.WriteLine("{0} + '{1}' + '{2}' = 0", plusN[p], minusN[p], minusN[n]);
  91.                         isSubset = false;
  92.                     }
  93.                 }
  94.             }
  95.  
  96.             if (plusArray > 1)              
  97.             {
  98.                 for (int p = 0; p < minusN.Length - 1; p++)
  99.                 {
  100.                     for (int n2 = 0; n2 < minusN.Length; n2++)
  101.                     {
  102.                         if (sumP + minusN[n2] == 0)
  103.                         {
  104.                             Console.WriteLine("{0} + {1} + '{2}' = 0", plusN[0], plusN[1], minusN[n2]);
  105.                             isSubset = false;
  106.                         }
  107.                         if ((p < n2) && sumP + (minusN[p] + minusN[n2]) == 0)
  108.                         {
  109.                             Console.WriteLine("{0} + {1} + '{2}' + '{3}' = 0", plusN[0], plusN[1], minusN[p], minusN[n2]);
  110.                             isSubset = false;
  111.                         }
  112.                         if (sumP + sumN == 0)
  113.                         {
  114.                             Console.WriteLine("{0} + {1} + '{2}' + '{3}' + '{4}' = 0",
  115.                                 plusN[0], plusN[1], minusN[0], minusN[1], minusN[2]);
  116.                             isSubset = false;
  117.                         }
  118.                     }
  119.                 }
  120.             }
  121.  
  122.             else if (isSubset)
  123.             {
  124.                 Console.WriteLine("No zero subset");
  125.             }
  126.         }
  127.  
  128.         else if (minusArray < plusArray)            // array Minus Lenght == small
  129.         {
  130.             int sumP = plusN.Sum();
  131.             int sumN = minusN.Sum();
  132.  
  133.             for (int p = 0; p < minusN.Length; p++)
  134.             {
  135.                 for (int n = 0; n < plusN.Length; n++)
  136.                 {
  137.                     if (minusN[p] + plusN[n] == 0)
  138.                     {
  139.                         Console.WriteLine("'{0}' + {1} = 0", minusN[p], plusN[n]);
  140.                         isSubset = false;
  141.                     }
  142.                     if (minusN[p] + plusN[p] + plusN[n] == 0)
  143.                     {
  144.                         Console.WriteLine("'{0}' + {1} + {2} = 0", minusN[p], plusN[p], plusN[n]);
  145.                         isSubset = false;
  146.                     }
  147.                 }
  148.             }
  149.  
  150.             if (minusArray > 1)
  151.             {
  152.                 for (int p = 0; p < plusN.Length - 1; p++)
  153.                 {
  154.                     for (int n2 = 0; n2 < plusN.Length; n2++)
  155.                     {
  156.                         if (sumN + plusN[n2] == 0)
  157.                         {
  158.                             Console.WriteLine("'{0}' + '{1}' + {2} = 0", minusN[0], minusN[1], plusN[n2]);
  159.                             isSubset = false;
  160.                         }
  161.                         if ((p < n2) && sumN + plusN[p] + plusN[n2] == 0)
  162.                         {
  163.                             Console.WriteLine("'{0}' + '{1}' + {2} + {3} = 0", minusN[0], minusN[1], plusN[p], plusN[n2]);
  164.                             isSubset = false;
  165.                         }
  166.                         if (sumN + sumP == 0)
  167.                         {
  168.                             Console.WriteLine("'{0}' + '{1}' + {2} + {3} + {4} = 0",
  169.                                 minusN[0], minusN[1], plusN[0], plusN[1], plusN[2]);
  170.                             isSubset = false;
  171.                         }
  172.                     }
  173.                 }
  174.             }
  175.            
  176.             else if (isSubset)
  177.             {
  178.                 Console.WriteLine("No zero subset");
  179.             }
  180.         }
  181.     }
  182. }
  183.  
  184. //  We are given 5 integer numbers. Write a program that finds all subsets of these numbers whose sum is 0.
  185. //Assume that repeating the same subset several times is not a problem.
  186. //Hint: you may check for zero each of the 32 subsets with 32 if statements.
  187.  
  188. //Examples:
  189. //  numbers                     result
  190. //3  -2  1  1 8                 -2 + 1 + 1 = 0
  191.  
  192. //3 1 -7 35 22                  no zero subset
  193.  
  194. //1 3 -4 -2 -1                  1 + -1 = 0
  195. //                              1 + 3 + -4 = 0
  196. //                              3 + -2 + -1 = 0
  197.  
  198. //1 1 1 -1 -1                   1 + -1 = 0
  199. //                              1 + 1 + -1 + -1 = 0
  200. //                              1 + -1 + 1 + -1 = 0
  201.  
  202. //0 0 0 0 0                     0 + 0 + 0 + 0 + 0 = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement