Loading...
VitaminX avatar VitaminX 7 Точки

Problem 12. * Zero Subset, Условни конструкции, Basics Sep 2015

Здравейте Колеги,

Надявам се някой от вас да успее да ми отговори на въпрос относно задача 12 от домашното за Условни конструкции.

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.

Това, което ме притеснява е, че пише „ ...repeating the same subset several times is not a problem“, но в примерите, комбинацията 1 1 1 -1 -1, не дава всички комбинации а само: 

1 + -1 = 0

1 + 1 + -1 + -1 = 0

1 + -1 + 1 + -1 = 0

при мен излизат:

1 + -1 = 0
1 + -1 = 0
1 + -1 = 0
1 + -1 = 0
1 + -1 = 0
1 + 1 + -1 + -1 = 0
1 + 1 + -1 + -1 = 0

Подозирам, че това не е правилен резултат, но бих искал да попитам и за вашето мнение преди да преправям решението.

Благодаря!

0
Programming Basics 14/10/2015 16:28:25
slavi.g.slavchev avatar slavi.g.slavchev 45 Точки

Здравейте.

Ако няма повторения на елементите (например при числа 5 -5 4 -4 10, да се проверяват 5 -5, -5 5, т.н.), то при равни числа в инпута би трябвало да е ОК, както спомена и flashest.

Аз съм ползвал генерирани "отвън" комбинации, но може би и те ползват побитовия алгоритъм, който най-вероятно е най-бързият.

Задачи с комбинации съм имал и в практиката, когато ни ги преподаваха в гимназия, не осъзнавах, че някога ще ми потрябват :)

Моето решение:

http://pastebin.com/JDmbwu9x

3
19/10/2015 00:45:41
flashestswag avatar flashestswag 66 Точки

Много ми хареса твоето решение, Слави :) Поздрави!
Най-много ми допадна, как с един ред образуваш комбинацията за печат :)

tempstring += inputNumbers[jaggedIndices[i][j]].ToString() + (j == jaggedIndices[i].Length-1 ? " = 0" : " + ");

След лекцията за цикли ми дойде още едно по-лесно решение на задачата. И решението е като твойто Слави, генерира всички уникални комбинации даващи 0. Само, че тия индекси не ги пишеш на ръка във  int[][] jaggedIndices, а ги генерират 5 вложени цикъла :)

Ето виж: http://pastebin.com/1jPLeiFg

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