[C#] Arrays - 21 задача


1
21.Write a program that reads two numbers N and K and generates all the combinations of K distinct elements from the set [1..N]. Example:

  N = 5, K = 2 -> {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5}, {4, 5}




Отговори



1

http://pastebin.com/DZEqxYtd

Комбинации (без повторение)

Даденото решение е чрез рекурсия, алгоритъма и повече за всички видове комбинации, пермутации и т.н. може да се види от тук:

http://www.youtube.com/watch?v=yzH05zmX7C4


от stanev.plamen (1143 точки)


0
Препоръчвам ти да спазваш наминг конвенцията, за методи на C#, а не на C. Когато дойде курса за КПК, ще ти е много по лесно. Методите могат да се викат само по име не е нужно да слагаш и класа, когато са в еднин и същи клас.

от buddi (723 точки)

0
Мерси много. Ще го оправя задължително. Ти доста точно се ориентира за С-то. Аз конвертнах и понагласих малко кода за програмата точно от С++ : )

от stanev.plamen (1143 точки)


1

В решенията на тази задача не успях да открия реализирано с взетия до момента матерал и за това реших да кача моето цък

Направил съм го, като изчислявам всички възможни вариации и след това превръщам числото от 10-тична в N-тична бройна система.

Edit : Проверявам след това в масива дали всички елементи са различни и подредени в нарастващ ред и ако е така го разпечатвам

Добавил съм разясняващи коментари в кода си


от bankoff (3997 точки)


0
Здравей, Решението ти с вложени цикли и итерация е много яко, само като го тествам применто за N=5, К=2, дава повече комбинации отколкото се изискват (започва да ги повтаря) В случая се иска да няма повторение - примерно щом принтне 1,5 няма нужда да принтира и 5,1. Мисля че може да стане с допълнителна (или текущата ти) булева променлива която да посочва дали да се принтира дадената комбинация. Поздрави : )

от stanev.plamen (1143 точки)

0
Благодаря :) Нещо не съм догледал условието. Сега ще оправя кода.

от bankoff (3997 точки)



1

Препоръчвам ви да изгледате видеата за Рекурсия и Комбинаторика от курса "Структури от данни и алгоритми". Ще ви помогнат да си напишете задачите за комбинации, вариации и пермутации и ще се запознаете с още една мощна техника в програмирането. :)


от vlad_karamfilov (4595 точки)


0
Ето моето решение - http://pastebin.com/PZPnScfp
В общи линии правя всичките възможни комбинации от N елемента и когато комбинацията включва К елемента я отпечатвам. Това успях да измисля аз.

от nikivat (246 точки)


0

Здравейте,

Моето решение на задачата е с итерации. Използвам два вложени while цикъла, външният е безкраен и функционира като брояч, който с всеки цикъл прибавя единица на последният елемент от комбинацията, а вътрешният пренастройва останалите елементи от комбинацията, когато последният елемент е изчерпал възможните варианти на текущата подредба, като спазва изискването елементите на комбинацията винаги да са подредени във възходящ ред от ляво на дясно.

http://pastebin.com/qGPUeYk9

 


от Chavdar (43 точки)


1

GitHub

Решението е с рекурсия. Тук понеже се търсят само уникални комбинации съм решил проблема като при всяко извикване на метода съм направил променливата на цикъла да почва от миналото число + 1 (тоест ако имам 1 2 _ тази трета позиция ще бъде запълнена първо от числото 2+1). Така се избягват повторенията. Надявам се променливите да са с достатъчно ясни наименования.


от dzhenko (3893 точки)


0

http://git.io/ib5ELg

Идеята е като в 19-та задача

Промените са, че въвеждам К и сверявам дължината с него - печатам и прекъсвам рекурсията, когато е стигната. Освен това, въвеждам индекс start, от който започват да се комбинират числата, който в началото е 0, а после е от индекса на съседното до последното отпечатано число.


от georgiwe (720 точки)


0
Хе : ) да се похваля и аз с моето решение, което не е с рекурсия и го родих по време на лекцията за Многомерни масиви... със знанията до момента
http://pastebin.com/g5qXF3tP
Не се стърпях, тъй като два пъти сядам да я решавам и все до задънена улица, но покрай лекцията явно ми дойде музата!

от p.penchev (204 точки)


0
При к = 1 или к = 2, според мен програмата ти цикли и не спира. Дано не греша, но така ми се струва.

от kaizer (213 точки)

0
Прав беше колега..
Добавих две условия и вече ги няма тези два безкрайни цикъла, които се получаваха
http://pastebin.com/0aRAcyYQ

от p.penchev (204 точки)