Loading...
msmilkoff avatar msmilkoff 338 Точки

Интересна задача от интервю за работа

Наскоро се мъчих със следната логическа задача - идеи?
В парламента има  15 депутати, всеки от които има най-много трима врагове измежду останалите. Как ще разделите депутатите в две групи, така че всеки депутат да има най-много двама врагове в собствената си група?

1
Общи приказки 11/06/2016 23:49:36
RFilipov avatar RFilipov 136 Точки

Поставяш един в група 1 и ForEach на враговете => поставяш един враг в група 2 и следващия в група 1 и така докато се изчерпат след това рекурсивно за враговете същата функция като проверяваш колко врагове има всеки един в групата вече съществуващи. Това е greedy алгоритъм, които може да не сработи само ако условието е зададено, така че да няма възможно разпределение. Започваш от тези с най-много врагове тъй като те са проблемните.

1
Filkolev avatar Filkolev 4482 Точки

Не виждам обаче в условието да е казано, че е известно кой на кого е враг, така че трябва да се подходи с ограничена информация, което прави задачата доста по интересна.

2
msmilkoff avatar msmilkoff 338 Точки

Измислих го само за едната група
Първо всеки един го слагам в група А и ако след добавянето някой от групата вече е станал с повече от 2-ма врагове, местя текущия (т.е. този, който е нарушил баланса) в група Б:
 

currentDep = deps.First
while deps.count > 0
    Push currentDep -> to group A
    forech dep in group A
        if dep.enemies.count > 2:
            group A->Pop(currentDep)
            push currentDep -> group B
currentDep = deps.Next



Обаче никой не знае в гупа Б какъв мазаляк е :)

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