Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- class ZeroSubset
- {
- static void Main()
- {
- Console.WriteLine("Enter 5 integer numbers.");
- int[] numbers = new int[5];
- bool isSubset = true;
- for (int i = 0; i < numbers.Length; )
- {
- Console.Write("No {0}:\t", i + 1);
- string userInput = Console.ReadLine();
- int number;
- if (int.TryParse(userInput, out number))
- {
- numbers[i] = number;
- i++;
- }
- }
- Array.Sort(numbers); // sort by -3, -1, 0, 1, 3
- foreach (int i in numbers)
- {
- if (i == 0)
- {
- Console.WriteLine("{0} + {1} + {2} + {3} + {4} = 0",
- numbers[0], numbers[1], numbers[2], numbers[3], numbers[4]);
- return;
- }
- }
- // next loop counting (+,- numbers) for arrays.Length
- int plusArray = 0;
- int minusArray = 0;
- for (int i = 0; i < numbers.Length; i++)
- {
- if (numbers[i] > 0)
- {
- plusArray = plusArray + 1;
- }
- else if (numbers[i] < 0)
- {
- minusArray += 1;
- }
- }
- //next loop assigned (+,- numbers) in their arrays
- int[] plusN = new int[plusArray];
- int[] minusN = new int[minusArray];
- int countP = 0;
- int countN = 0;
- for (int i = 0; i < numbers.Length; i++)
- {
- if (numbers[i] > 0)
- {
- plusN[countP] += numbers[i];
- countP++;
- }
- else if (numbers[i] < 0)
- {
- minusN[countN] += numbers[i];
- countN++;
- }
- }
- Array.Reverse(minusN); // reverse from -5-4-3-2-1 to -1-2-3-4-5
- if (plusArray < minusArray) // array Plus lenght == small
- {
- int sumP = plusN.Sum();
- int sumN = minusN.Sum();
- for (int p = 0; p < plusN.Length; p++)
- {
- for (int n = 0; n < minusN.Length; n++)
- {
- if (plusN[p] + minusN[n] == 0)
- {
- Console.WriteLine("{0} + '{1}' = 0", plusN[p], minusN[n]);
- isSubset = false;
- }
- if (plusN[p] + (minusN[p] + minusN[n]) == 0)
- {
- Console.WriteLine("{0} + '{1}' + '{2}' = 0", plusN[p], minusN[p], minusN[n]);
- isSubset = false;
- }
- }
- }
- if (plusArray > 1)
- {
- for (int p = 0; p < minusN.Length - 1; p++)
- {
- for (int n2 = 0; n2 < minusN.Length; n2++)
- {
- if (sumP + minusN[n2] == 0)
- {
- Console.WriteLine("{0} + {1} + '{2}' = 0", plusN[0], plusN[1], minusN[n2]);
- isSubset = false;
- }
- if ((p < n2) && sumP + (minusN[p] + minusN[n2]) == 0)
- {
- Console.WriteLine("{0} + {1} + '{2}' + '{3}' = 0", plusN[0], plusN[1], minusN[p], minusN[n2]);
- isSubset = false;
- }
- if (sumP + sumN == 0)
- {
- Console.WriteLine("{0} + {1} + '{2}' + '{3}' + '{4}' = 0",
- plusN[0], plusN[1], minusN[0], minusN[1], minusN[2]);
- isSubset = false;
- }
- }
- }
- }
- else if (isSubset)
- {
- Console.WriteLine("No zero subset");
- }
- }
- else if (minusArray < plusArray) // array Minus Lenght == small
- {
- int sumP = plusN.Sum();
- int sumN = minusN.Sum();
- for (int p = 0; p < minusN.Length; p++)
- {
- for (int n = 0; n < plusN.Length; n++)
- {
- if (minusN[p] + plusN[n] == 0)
- {
- Console.WriteLine("'{0}' + {1} = 0", minusN[p], plusN[n]);
- isSubset = false;
- }
- if (minusN[p] + plusN[p] + plusN[n] == 0)
- {
- Console.WriteLine("'{0}' + {1} + {2} = 0", minusN[p], plusN[p], plusN[n]);
- isSubset = false;
- }
- }
- }
- if (minusArray > 1)
- {
- for (int p = 0; p < plusN.Length - 1; p++)
- {
- for (int n2 = 0; n2 < plusN.Length; n2++)
- {
- if (sumN + plusN[n2] == 0)
- {
- Console.WriteLine("'{0}' + '{1}' + {2} = 0", minusN[0], minusN[1], plusN[n2]);
- isSubset = false;
- }
- if ((p < n2) && sumN + plusN[p] + plusN[n2] == 0)
- {
- Console.WriteLine("'{0}' + '{1}' + {2} + {3} = 0", minusN[0], minusN[1], plusN[p], plusN[n2]);
- isSubset = false;
- }
- if (sumN + sumP == 0)
- {
- Console.WriteLine("'{0}' + '{1}' + {2} + {3} + {4} = 0",
- minusN[0], minusN[1], plusN[0], plusN[1], plusN[2]);
- isSubset = false;
- }
- }
- }
- }
- else if (isSubset)
- {
- Console.WriteLine("No zero subset");
- }
- }
- }
- }
- // We are given 5 integer numbers. Write a program that finds all subsets of these numbers whose sum is 0.
- //Assume that repeating the same subset several times is not a problem.
- //Hint: you may check for zero each of the 32 subsets with 32 if statements.
- //Examples:
- // numbers result
- //3 -2 1 1 8 -2 + 1 + 1 = 0
- //3 1 -7 35 22 no zero subset
- //1 3 -4 -2 -1 1 + -1 = 0
- // 1 + 3 + -4 = 0
- // 3 + -2 + -1 = 0
- //1 1 1 -1 -1 1 + -1 = 0
- // 1 + 1 + -1 + -1 = 0
- // 1 + -1 + 1 + -1 = 0
- //0 0 0 0 0 0 + 0 + 0 + 0 + 0 = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement