Loading...
vgivanov avatar vgivanov 42 Точки
Best Answer

Здравей!

Имаше няколко излишни проверки и цикли а и devide-a го коригирах. Не е необходимо да връщаш List-a тъй като е референтен тип.

Може да разгледаш кода https://pastebin.com/s6GHWFJU

1
16/06/2019 20:32:18
anizko avatar anizko 1 Точки

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

Формулата беше много хитър начин :) и функицията  ххххх.Substring(ххххх) ще я разгледам :)

0
Elena123456 avatar Elena123456 235 Точки

Здравейте, може ли малко помощ за тази задача: Judge 60/100 , а на дадените инпути, аутпутите ми излизат коректно, но Judge дава RunTime Error.

Много е странно, че имам мое решение, което дава 90/100, но без да излизат правилните аутпути на дадените инпути. Когато ги направих да си съответват ми даде по-малко точки- 60 /100. Въпреки това решението с по-малкото точки за мен е по-логичното, поне за сега. Така че пействам него.

using System;
using System.Collections.Generic;
using System.Linq;


namespace listExer
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            List<string> text = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            string command = Console.ReadLine();
            while (command != "3:1")
            {
                string[] commandArray = command.Split();

                if (commandArray[0] == "merge")
                {
                    int startIndex = int.Parse(commandArray[1]);
                    int startIndexInBound = Math.Max(startIndex, 0);
                    startIndexInBound = Math.Min(startIndex, text.Count-1);
                    int endIndex = int.Parse(commandArray[2]);
                    int endIndexInBound = Math.Max(0, endIndex);
                    endIndexInBound = Math.Min(text.Count - 1, endIndex);
                    string concat = string.Empty;
                     for (int i = startIndexInBound; i <= endIndexInBound; i++)
                        {
                            concat += text[i];
                        }

                        text.RemoveRange(startIndexInBound, endIndexInBound - startIndexInBound + 1);
                        text.Insert(startIndexInBound, concat);
                }

                else if (commandArray[0] == "divide")
                {
                    int index = int.Parse(commandArray[1]);
                    int indexInBound = Math.Max(0, index);
                    indexInBound = Math.Min(text.Count - 1, index);
                    int partitions = int.Parse(commandArray[2]);

                    string word = text[indexInBound];
                    int stringLengthToAdd = word.Length / partitions;

                    List<string> listAfterDivide = new List<string>();
                    int startIndex = 0;
                    for (int i = 0; i < partitions; i++)
                    {
                        if (i == partitions - 1)
                        {

                            listAfterDivide.Add(word.Substring(startIndex, word.Length - startIndex));
                        }

                        else if (i < partitions - 1)
                        {
                            listAfterDivide.Add(word.Substring(startIndex, stringLengthToAdd));
                            startIndex += stringLengthToAdd;
                        }
                    }

                    text.RemoveAt(indexInBound);
                    text.InsertRange(indexInBound, listAfterDivide);
                }

                command = Console.ReadLine();
            }

            Console.WriteLine(string.Join(" ", text));

        }
    }
}

 

0
22/09/2020 01:53:47
Elena123456 avatar Elena123456 235 Точки

Сама си открих грешката, щастлива съм! :)

Ето малко по-различен начин как можем да направим така, че да не излизаме от границите на масива, без да използваме допълнителни if/else проверки:

                   int startIndex = int.Parse(commandArray[1]);
                    int startIndexInBound = Math.Max(startIndex, 0);
                    startIndexInBound = Math.Min(startIndexInBound, text.Count-1);
                    int endIndex = int.Parse(commandArray[2]);
                    int endIndexInBound = Math.Max(0, endIndex);
                    endIndexInBound = Math.Min(text.Count - 1, endIndexInBound);

Точно подчертаните променливи ми бяха проблем, че вместо тях бях сложила съответно startIndex и endIndex, но трябва да бъде променливата, която последо сме записали. И е важно условие първо да се използва Math.Max и после Math.Min. В обратен ред ако са програмата се чупи. Чрез тези няколко презаписвания аз гарантирам, че винаги въведеното числото ще ми бъде по-голямо от 0 и по-малко от дължината на листа.

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

И кода ми 100/100: https://pastebin.com/0zhWAwUs

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