[Homework] C# Conditional Statements {12} Zero Subset
Страхотна задача.
Ето, който иска да почете малко повече по въпроса.
http://en.wikipedia.org/wiki/Subset_sum_problem
Тук представям рекурсивно решение. Пропуснал съм частта с въвеждането на числата от конзолата, за 5-та седмица, предполагам това е тренирано вече от всички.
Има още едно интересно решение, с разделяне на положителни и отрицателни числа, то е по-лесно за направа, при него интересното е самия алгоритъм и идеята с разделяне на въведените числа.
Ето рекурсивно решение : тук
Mod Edit: Моля, спазвайте правилата на форума.
БРАВО! По принцип това се искаше в задачата, да се упражнят if-овете.
Бих те посъветвал да слагаш отстъп пред
Console.WriteLine
, за да е ясно, че се изпълняват в зависимост от някакво условие.Например:
а пък по принцип най-добрият вариант е
Тук форумът му форматира кода така(подрежда го в ляво).
Няма майтап, май само твоето работи със 100%-това точност. Браво за търпението :D
Имаш повтарящи се If-ове :)
if (b + c == 0)
if (c + e == 0)
Ето го и моя код:
string[] userInput = Console.ReadLine().Split(' ');
double a = double.Parse(userInput[0]);
double b = double.Parse(userInput[1]);
double c = double.Parse(userInput[2]);
double d = double.Parse(userInput[3]);
double e = double.Parse(userInput[4]);
if (a + b == 0)
{
Console.WriteLine("{0} + {1} = 0", a, b);
}
else if (a + c == 0)
{
Console.WriteLine("{0} + {1} = 0", a, c);
}
else if (a + d == 0)
{
Console.WriteLine("{0} + {1} = 0", a, d);
}
else if (a + e == 0)
{
Console.WriteLine("{0} + {1} = 0", a, e);
}
else if (b + c == 0)
{
Console.WriteLine("{0} + {1} = 0", b, c);
}
else if (b + d == 0)
{
Console.WriteLine("{0} + {1} = 0", b, d);
}
else if (b + e == 0)
{
Console.WriteLine("{0} + {1} = 0", b, e);
}
else if (c + d == 0)
{
Console.WriteLine("{0} + {1} = 0", c, d);
}
else if (c + e == 0)
{
Console.WriteLine("{0} + {1} = 0", c, e);
}
else if (d + e == 0)
{
Console.WriteLine("{0} + {1} = 0", d, e);
}
else if (a + b + c == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", a, b, c);
}
else if (a + b + d == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", a, b, d);
}
else if (a + b + e == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", a, b, e);
}
else if (a + c + d == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", a, c, d);
}
else if (a + c + e == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", a, c, e);
}
else if (a + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", a, d, e);
}
else if (b + c == 0)
{
Console.WriteLine("{0} + {1} = 0", b, c);
}
else if (b + d == 0)
{
Console.WriteLine("{0} + {1} = 0", b, d);
}
else if (b + e == 0)
{
Console.WriteLine("{0} + {1} = 0", b, e);
}
else if (b + c + d == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", b, c, d);
}
else if (b + c + e == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", b, c, e);
}
else if (b + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", b, d, e);
}
else if (c + d == 0)
{
Console.WriteLine("{0} + {1} = 0", c, d);
}
else if (c + e == 0)
{
Console.WriteLine("{0} + {1} = 0", c, e);
}
else if (c + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} = 0", c, d, e);
}
else if (d + e == 0)
{
Console.WriteLine("{0} + {1} = 0", d, e);
}
else if (a + b + c + d == 0)
{
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, c, d);
}
else if (a + b + c + e == 0)
{
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, c, e);
}
else if (a + b + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, d, e);
}
else if (a + c + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, c, d, e);
}
else if (b + c + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} + {3} = 0", b, c, d, e);
}
else if (a + b + c + d + e == 0)
{
Console.WriteLine("{0} + {1} + {2} + {3} + {4} = 0", a, b, c, d, e);
}
else
{
Console.WriteLine("no zero subset");
}
Браво, колега! Позанимавал си се, но забелязвам, че три или четири ифчета ти се повратят, не съм се вглеждал толкова, станах разноглеd.. :D
само едно малко изменение на кода искам да предложа, за да бъде точен, тък като сега последното else не трябва да е else, а трябва да е if.
с elseif също не става, защото не изкарва всички възможни резултати. така, че мисля, че това е най-добрият вариант.
пова е поето предложение: