Loading...
cap7ainjack avatar cap7ainjack 20 Точки

[Homework] Advanced C# - Arrays, Lists, Stacks, Queues - Въпрос за задача 7

Здравейте!

Не успявам да подкарам 7ма.

Правя го като просто си променям променям решението от 6-та с обхождане на масива чрез битова операция, но не тръгва и не мога да хвана къде логиката е грешна. Някой може ли да я погледне ?

 

 

http://pastebin.com/Bg0rRrN0

Тагове:
1
Fundamentals Module
kidroca avatar kidroca 117 Точки
Best Answer

Здравей, 

http://pastebin.com/CtPfVTBs - Проблема беше във листа във който помниш текущата комбинация currentComb 

виж как съм го преправил, сложил съм коментари на кода който съм добавил

Понеже списъкът е референтен тип данни, когато във него вложиш друг списък, той не копира вложения списък а само референция към неговите данние, т.е по - ранно всеки индекс от allcombs сочеше към данните на currentComb и тъй като те се зачистваха при всяко преминаване през цикъла всички индекси на allcombs сочеха към празен списък.

Представи си го като link - allcombs не помни currentComb а запомня link към него.

Но ако вместо това currentComb се създава всеки път когато трябва да се добави нов списък към останалите понеже currentComb се създава със new този currentComb не сочи към същия адрес и така данните му не се презаписват и се пази референция / link е към новия list

С две думи нещата които са refference type не се  копират изрично и трябва ти да си ги копираш/клонираш , конструираш.

Надявам се си ме разбрал. 

Успех!

4
20/09/2015 13:06:34
mishomihaylov avatar mishomihaylov 67 Точки

Кidroca, радвам се, че си качил твоето решение. Послужи ми за пример относно начина за намиране на Subset-a :). Докато правех моята открих и 2 пропуска. Те са при следните положения:
1. Sum = 0 -> Numbers = 1, 2, 3; => тук програмата се чупи и решението е да добавиш към currentComb.Sum() == sum и дали съществува наличен елемент (§§ currentComb.Any()).

2. Sum = 5 -> Numbers = 1, 2, 3, 1, 1, 1, 1 => тук програмата вади само 2+3.

1
20/09/2015 19:31:49
cap7ainjack avatar cap7ainjack 20 Точки

Разбрах те кристално :)

 

Благодаря много!

1
20/09/2015 19:59:15
kidroca avatar kidroca 117 Точки

mishomihaylov :)

Решението е на колегата, аз само добавих 1 - 2 реда

Мерси все пак :)

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей,

алгоритъма ти по принцип работи.

Има само един проблем на ред 34.

На ред 34 казваш: allcombs.Add(currentComb);

после на ред 37 казваш: currentComb.Clear();

така понеже list e референтен тип данни, всичките ти листове в List<List<int>> allcombs сочат към празни копия на currentComb

Ако смениш твоя ред 34 с този: allcombs.Add(new List<int>(currentComb));

програмата тръгва.

2
cap7ainjack avatar cap7ainjack 20 Точки

Мерси!

0
Fujitzo avatar Fujitzo 9 Точки

Въпрос към всички:

С тези ламбда изрази (x => x.Count)  и (y => y.First) при мен подреждането не става точно както е дадено в условието. Ето какво получавам:

11 = 11
0 + 11 = 11
1 + 10 = 11
0 + 1 + 10 = 11
5 + 6 = 11
0 + 5 + 6 = 11
1 + 4 + 6 = 11
0 + 1 + 4 + 6 = 11
1 + 3 + 7 = 11
0 + 1 + 3 + 7 = 11
4 + 7 = 11
0 + 4 + 7 = 11
1 + 2 + 3 + 5 = 11
0 + 1 + 2 + 3 + 5 =
2 + 3 + 6 = 11
0 + 2 + 3 + 6 = 11
2 + 4 + 5 = 11
0 + 2 + 4 + 5 = 11

Порбвах на 1 ред с OrderBy i posle ThenBy, както и на отделни редове - все това си вади

Идеи ?

0
Filkolev avatar Filkolev 4482 Точки

Има методи OrderBy, OrderByDescending, ThenBy, ThenByDescending. Вероятно просто трябва да полваш методите, които сортират в обратна посока.

0
kidroca avatar kidroca 117 Точки

Здравей,

Така може само да гадаем, поради някаква причина не ти работи (y => y.First()) но не мога да ти кажа каква, защото не се вижда как го ползваш - paste-ни си решението в http://pastebin.com/

Ламбда изразите имат смисъл в контекста в който се ползват, един лабмда израз изваден от контекста говори твърде малко, защото не може да разбереш какво точно е x или y (върху какво се ползва ламбда изразът), y.First() ми говори само че y може би е IEnumerable...

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