Loading...

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

kaloyan_kolev avatar kaloyan_kolev 10 Точки

90/100 на Anonymous Threat

Здравейте,

от задачите със звездичките успявам да решавам почти всички, но не мога да ги правя винаги на 100 точки. Бихте ли ме посъветвали какво да правя, когато стигна примерно в тази ситуация - 90/100 точки и като нулевите тестове ми минават? Качвам условието и задачата и се надявам, че някой може да помогне. Това с = null може би не е от най-адекватните неща, но просто изках да изпробвам може ли и така. Благодаря предварително!

https://pastebin.com/p6V5QFpm - кодът ми

https://softuni.bg/downloads/svn/soft-tech/Jan-2019/Csharp/05-Lists/Exercise/05.%20Lists-Exercises.docx - условието, Problem08

Тагове:
0
Fundamentals Module
DimitarVlaev avatar DimitarVlaev 91 Точки
Best Answer

Здравей колега,

Проблемът идва от "Divide" метода, в който променливата "stringToAdd" е от тип string. Това означава, че след като приключиш обработката на "stringToAdd" в "Divide" метода, вътре в "stringToAdd" ще имаш празни полета, които обаче в състава на един string се водят characters, а това не е позволено по условие. Предполагам логиката е, след като инсъртнеш "stringToAdd" в "input", всеки елемент, който си получил от делението, да бъде отделен стринг със съответен индекс в "input" и да може да бъде достъпван и обработван поотделно. В случая, всичко което е в "stringToAdd" представлява един единствен string с един единствен индекс в "input".

Затова променливата "stringToAdd" трябва да е от тип array или list.

Ето една съвсем примерна преработка на "Divide" метода:

private static List<string> Divide(List<string> input, int index, int partitions)
        {
            string stringToDivide = input[index];
            input.RemoveAt(index);
            var stringToAdd = new List<string>(); // променливата "stringToAdd" от тип list;
            int partitionLength = stringToDivide.Length / partitions;
            int remainder = stringToDivide.Length % partitions; // остатък от делението, който ще ни помогне при изписването;

            string token = ""; // единичен елемент от делението; 
            int count = 0; // един каунт, който ще ни помогне при изписването на последния елемент;

            for (int i = 0; i < stringToDivide.Length; i++) // итерираме по дължината на стринга, който делим;
            {
                token += stringToDivide[i];
                if (token.Length == partitionLength) // когато единичният елемент достигне желаната дължина,
                {
                    stringToAdd.AddRange(token.Split().ToList()); // го прибавяме към променливата "stringToAdd",
                    token = ""; // и "зануляваме" единичният елемент, за да дефинираме следващия; 
                    count++;
                    if (count == partitions - 1) partitionLength += remainder; // определяме дължината на последния елемент;
                }
            }
            input.InsertRange(index, stringToAdd);

            return input;
        }

Успех!

1
kaloyan_kolev avatar kaloyan_kolev 10 Точки

Благодаря ти!

1
Hristo13 avatar Hristo13 227 Точки

Първото нещо което ти препоръчвам в такива ситуации е много внимателно препрочитане на условието. Лично при мен голяма част от грешките са именно от това а и не малка част от задачите със звезди имат уловки. Ако не е там проблема измисляй си разни крайни случай за вход и следи логиката стъпка по стъпка на дебъгера.

0
kaloyan_kolev avatar kaloyan_kolev 10 Точки

Благодаря!

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