Loading...

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

YanaStamenova avatar YanaStamenova 21 Точки

Kamino Factory C#- идеи за по-опростено решение

Здравейте. Реших задача Kamino Factory. В Judge имам 100/100, но си мисля, че задачата може да бъде решена по-опростено. Ще се радвам, ако получа малко идеи.

Ето и моя код: https://pastebin.com/YmnjuJjU?fbclid=IwAR2YyG2IzaEFAM_rSZDguTiY2r6B0TjPpaljSDIpVnI7lcml3CB1SWCBLo8

2
Module: C# Advanced
YanaStamenova avatar YanaStamenova 21 Точки

Такива решения ми харесват. Още не мога да ги измислям обаче. Мерси :)

0
Elena123456 avatar Elena123456 235 Точки

Здравейте колеги, ето и едно не чак толкова обемно  решение https://pastebin.com/TjeqFYgQ с един for  цикъл в while цикъла и три if/else проверки:

1) if (bestCurrentLengthOfOne > bestLengthDNA);

 

2) else if (bestCurrentLengthOfOne == bestLengthDNA)

а) if (currentENDIndex < bestENDIndex)

б) else if (currentENDIndex == bestENDIndex)

   if (currentSum > bestDNASum
 

Използвам for цикъл до i < currentDNA.Length - 1 (без последния елемент, че иначе се чупи) за да намеря най-дългата поредица от еденици в текущата DNA секвенция: ако два елемента са еднакви ще увеличавам counter, но ако са различни ще го сетвам отново на 1. Умишлено не съм използвала формулата за намиране на startIndex, защото дори и само с еndIndex при положение, че дължината на две DNA са еднакви, програмата се ориентира коя секвенция е по- наляво.( еndIndex<bestEndIndex).

Разгледах кодове на колеги, които все още не са 100/100. Направи ми впечатление различните места на деклариране на променливите- в и извън while цикъла, както и сетването на различни стойности на първоначалните променливи. След тестванията, които направих мисля, че е достатъчно само дължината на текущата DNA секвенция от еденици да е 1, а всички други променливи да се сетват примерно на 0.

И предполагам, че в while цикъла трябва да се сетнат само следните променливи, че при всяка нова DNA да се рестартират:

int currentLengthOfOne = 1;

int bestCurrentLengthOfOne = 0;

int currentENDIndex = 0;

int currentSum = 0;

 

А извън while цикъла са тези променливи, които не трябва да се рестартират при всяко изпълнение на цикъла. Тях ще ги рестартираме само след като направим трите проверки накрая и установим коя е най-добрата DNA секвенция от всичките текущи:

int bestLengthDNA = 0;

int bestENDIndex = 0;

int bestDNASum = 0;

int currentDNACounter = 0;

int bestDNACounter = 0;

int[] bestDNA = new int [n];

 

И нещото, което аз обърках на няколко пъти беше, че не приравнявах правилно масивите от DNA секвенции:

bestDNA = currentDNA.ToArray();

 

И споделям едно 30 min  видео на Саня Касърова, което е специално за задачата "Camino factory", ако все още някой се затруднява с нея. Видеото е найстина много добро и всичко е обяснено много чисто и ясно.

https://softuni.bg/trainings/resources/video/50372/%D0%B4%D0%BE%D0%BF%D1%8A%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%BD%D0%BE-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-09-kamino-factory-%D1%81%D0%B0%D0%BD%D1%8F-%D0%BA%D0%B0%D1%81%D1%8A%D1%80%D0%BE%D0%B2%D0%B0-csharp-fundamentals-may-2020/2830

 

2
goalken avatar goalken 5 Точки

I just joined the forum so there are so many things I don’t know yet, I hope to have the help of the boards, and I really want to get to know you all on the forum run 3

-1
tsvetelina.davidova avatar tsvetelina.davidova 1 Точки

Огромно Благодаря за линка към видеото! Изключително ясно обяснение и лесно решение на иначе изглеждащата доста трудна задача. Бях я докарала до 60/100, но сега вече всичко е по-ясно.

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