Loading...
achkata avatar achkata 17 Точки

[Homework] C# Conditional Statements {12} Zero Subset

Страхотна задача.

Ето, който иска да почете малко повече по въпроса.

http://en.wikipedia.org/wiki/Subset_sum_problem

Тук представям рекурсивно решение. Пропуснал съм частта с въвеждането на числата от конзолата, за 5-та седмица, предполагам това е тренирано вече от всички.

Има още едно интересно решение, с разделяне на положителни и отрицателни числа, то е по-лесно за направа, при него интересното е самия алгоритъм и идеята с разделяне на въведените числа.

Ето рекурсивно решение : тук

Mod Edit: Моля, спазвайте правилата на форума.

 

Тагове:
2
Programming Basics 07/12/2014 17:16:39
YaneYo avatar YaneYo 40 Точки

Ето го и моето спартанско решение... :Р

 

using System;
class ZeroSubset
{
static void Main()
{
Console.WriteLine("Enter five integer numbers");

int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int c = int.Parse(Console.ReadLine());
int d = int.Parse(Console.ReadLine());
int e = int.Parse(Console.ReadLine());

if (a + b == 0)
Console.WriteLine("{0} + {1} = 0", a, b);
if (a + c == 0)
Console.WriteLine("{0} + {1} = 0", a, c);
if (a + d == 0)
Console.WriteLine("{0} + {1} = 0", a, d);
if (a + e == 0)
Console.WriteLine("{0} + {1} = 0", a, e);
if (b + c == 0)
Console.WriteLine("{0} + {1} = 0", b, c);
if (b + d == 0)
Console.WriteLine("{0} + {1} = 0", b, d);
if (b + e == 0)
Console.WriteLine("{0} + {1} = 0", b, e);
if (c + d == 0)
Console.WriteLine("{0} + {1} = 0", c, d);
if (c + e == 0)
Console.WriteLine("{0} + {1} = 0", c, e);
if (d + e == 0)
Console.WriteLine("{0} + {1} = 0", d, e);
if (a + b + c == 0)
Console.WriteLine("{0} + {1} + {2} = 0", a, b, c);
if (a + b + d == 0)
Console.WriteLine("{0} + {1} + {2} = 0", a, b, d);
if (a + b + e == 0)
Console.WriteLine("{0} + {1} + {2} = 0", a, b, e);
if (a + c + d == 0)
Console.WriteLine("{0} + {1} + {2} = 0", a, c, d);
if (a + c + e == 0)
Console.WriteLine("{0} + {1} + {2} = 0", a, c, e);
if (a + d + e == 0)
Console.WriteLine("{0} + {1} + {2} = 0", a, d, e);
if (b + c == 0)
Console.WriteLine("{0} + {1} = 0", b, c);
if (b + d == 0)
Console.WriteLine("{0} + {1} = 0", b, d);
if (b + e == 0)
Console.WriteLine("{0} + {1} = 0", b, e);
if (b + c + d == 0)
Console.WriteLine("{0} + {1} + {2} = 0", b, c, d);
if (b + c + e == 0)
Console.WriteLine("{0} + {1} + {2} = 0", b, c, e);
if (b + d + e == 0)
Console.WriteLine("{0} + {1} + {2} = 0", b, d, e);
if (c + d == 0)
Console.WriteLine("{0} + {1} = 0", c, d);
if (c + e == 0)
Console.WriteLine("{0} + {1} = 0", c, e);
if (c + d + e == 0)
Console.WriteLine("{0} + {1} + {2} = 0", c, d, e);
if (d + e == 0)
Console.WriteLine("{0} + {1} = 0", d, e);
if (a + b + c + d == 0)
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, c, d);
if (a + b + c + e == 0)
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, c, e);
if (a + b + d + e == 0)
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, d, e);
if (a + c + d + e == 0)
Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, c, d, e);
if (b + c + d + e == 0)
Console.WriteLine("{0} + {1} + {2} + {3} = 0", b, c, d, e);
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");
}
}
13
aslv1 avatar aslv1 304 Точки

БРАВО! По принцип това се искаше в задачата, да се упражнят if-овете.

Бих те посъветвал да слагаш отстъп пред Console.WriteLine, за да е ясно, че се изпълняват в зависимост от някакво условие.

Например:

if (c + e == 0)
    Console.WriteLine("{0} + {1} = 0", c, e);

а пък по принцип най-добрият вариант е

if (c + e == 0)
{
    Console.WriteLine("{0} + {1} = 0", c, e);
}
0
beBoss avatar beBoss 507 Точки

Тук форумът му форматира кода така(подрежда го в ляво).

2
bangelova avatar bangelova 48 Точки

Няма майтап, май само твоето работи със 100%-това точност. Браво за търпението :D

0
AntyfrizZz avatar AntyfrizZz 238 Точки

Имаш повтарящи се If-ове :)

if (b + c == 0)
 if (b + d == 0)
 
if (b + e == 0)

 

if (c + d == 0)
if (c + e == 0)


 

0
yonikolova avatar yonikolova 5 Точки

Ето го и моя код:

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");
}

-1
Kadiiski avatar Kadiiski 0 Точки

Браво, колега! Позанимавал си се, но забелязвам, че три или четири ифчета ти се повратят, не съм се вглеждал толкова, станах разноглеd.. :D

0
23/04/2015 20:12:41
bulgaria_mitko avatar bulgaria_mitko 133 Точки

само едно малко изменение на кода искам да предложа, за да бъде точен, тък като сега последното else не трябва да е else, а трябва да е if.

с elseif също не става, защото не изкарва всички възможни резултати. така, че мисля, че това е най-добрият вариант.

пова е поето предложение: 

    class ZeroSubset
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            int b = int.Parse(Console.ReadLine());
            int c = int.Parse(Console.ReadLine());
            int d = int.Parse(Console.ReadLine());
            int e = int.Parse(Console.ReadLine());

            bool isThere = false;

            if (a == 0 && b == 0 && c == 0 && d == 0 && e == 0)
            {
                Console.WriteLine("{0} + {1} + {2} + {3} + {4} = 0", a, b, c, d, e);
                Environment.Exit(0);
            }

            if (a + b == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", a, b);
            }
            if (a + c == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", a, c);
            }
            if (a + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", a, d);
            }
            if (a + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", a, e);
            }
            if (b + c == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", b, c);
            }
            if (b + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", b, d);
            }
            if (b + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", b, e);
            }
            if (c + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", c, d);
            }
            if (a + b + c == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", a, b, c);
            }
            if (a + b + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", a, b, d);
            }
            if (a + b + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", a, b, e);
            }
            if (a + c + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", a, c, d);
            }
            if (a + c + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", a, c, e);
            }
            if (a + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", a, d, e);
            }
            if (b + c == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", b, c);
            }
            if (b + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", b, d);
            }
            if (b + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", b, e);
            }
            if (b + c + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", b, c, d);
            }
            if (b + c + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", b, c, e);
            }
            if (b + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", b, d, e);
            }
            if (c + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", c, d);
            }
            if (c + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", c, e);
            }
            if (c + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} = 0", c, d, e);
            }
            if (d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} = 0", d, e);
            }
            if (a + b + c + d == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, c, d);
            }
            if (a + b + c + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, c, e);
            }
            if (a + b + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, b, d, e);
            }
            if (a + c + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} + {3} = 0", a, c, d, e);
            }
            if (b + c + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} + {3} = 0", b, c, d, e);
            }
            if (a + b + c + d + e == 0)
            {
                isThere = true;
                Console.WriteLine("{0} + {1} + {2} + {3} + {4} = 0", a, b, c, d, e);
            }
            if (!isThere)
            {
                Console.WriteLine("no zero subset");
            }
        }

 

1
17/06/2015 17:18:08
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.