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


2
5.Write a program that finds the maximal increasing sequence in an array.
Example:  {3, 2, 3, 4, 2, 2, 4} ->{2, 3, 4}.



Отговори



1

Ето и моето решение на задачата :]   -->CLICK<-- 

Потребителят въвежда число от конзолата, с което ще дефинира дължината на масива, който следва да бъде въведен. След определяне на тази дължина, с for цикъл инициализираме всеки един от елементите на масива със стойности въведени от потребителя. Принтираме полученият масив на екрана, за да му е по-лесно на потребителя да се ориентира и да вижда разпределението на елементите му. Въвеждам си 3 променливи: - bestLen (пазеща най-голямата дължина на елементи обособяващи нарастваща единица), currentLen (текущата дължина на елементи в нарастваща редица), numIndex (индексът, от който започва тази редица). Правим проверка за това дали текущият елемент е по-голям от следващият елемент и ако е така увеличаваме текущата дължина с 1-ца. Ако не е - правим я равна на единица (да, началната и стойност е 1-ца, но ако сме на n-тата проверка може стойността да и е повече от 1 и е необходимо да я установим в началната и стойност, за да са коректни по-нататъчните проверки). След това правим проверки дали текущата дължина на редицата е по-голяма от най-добрата досега. Ако това е в сила- присвояваме стойността на bestLen да е равна на currentLen. Тук е нужно да определим и стойността на началният индекс на редицата, който ще е равен на разликата между текущият индекс на масива и текущата дължина на получилата се нарастваща редица до момента. Изходът го печатаме по подходящ начин както се изисква в лекцията - в къдрави скоби със запетайки между елементите.


от Vlado_XXX (944 точки)


0
http://pastebin.com/P7iDfRye
Успех !

от agentzero (0 точки)


0

Моето решение със списъци: http://pastebin.com/ZTNaMZ3k




0

Съществената част на решението, без входа и изхода е тази :

        for (int i = 1; i < sequence.Length; i++)
        {
            if (sequence[i - 1] < sequence[i])
            {
                seqLength++;
            }
            else
            {
                if (seqLength > bestLength)
                {
                    bestLength = seqLength;
                    bestIndex = startIndex;
                }
 
                startIndex = i;
                seqLength = 1;
            }
        }
Започвам цикъла от 1, защото сравнявам нулевия с първия елемент. Така няма да изляза и от границите на масива. Ако нямам по-голям елемент , а по-малък или равен, то започвам броенето от 1, като не забравям да проверя дали намерената редица не е най-дългата.
 

от TarliT (239 точки)


0
Какво се случва ако поредицата е:
{023167}
Коя следва да е максималната - 23 или 67?

от topsoft (420 точки)


0
Не се бях сетил, но според мен би трябвало да се изведат и двете И въобще какво означава "maximal increasing sequence"? най-дългата би трябвало да е "longest", a "maximal" да означава с максимална сума на елементите?

от iliyanti (15 точки)

0
Ами някой от трейнърите да каже, защото задачата става различна.....

от topsoft (420 точки)



0

GitHub

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


от dzhenko (3893 точки)


0
http://pastebin.com/ECiRyLCE - моето решение с промяна само на 2 символа от 4 задача.

от GoShow (69 точки)


0
Принтирането на масивът може да го съкратиш до: Console.WriteLine("Array: {0}", string.Join(", ", arr)); После: for (int j = 0; j < arr.Length - 1; j++) и премахваш: if (j == arr.Length - 1)

от Anastasoff (465 точки)


0

Ето и  моето решение : http://pastebin.com/AsnvPCkt


от streetboyyy (78 точки)


0

Тук решението е много подобно да 4-та задача с много малки разлики. Обикаля се по масива с проверка дали настоящият елемент е по-голям от предходния. Ако това е така - увеличава се размера на настоящатата редица с единица. Ако това не е така, настоящата дължина се сравнява с максималната до момента и ако я надвишава се запазва стойността на предходния индекс на масива в списък. Списъкът е нужен, за да могат да се отпечатат всички редици, отговарящи на условието (ако има повече от една такава.) Накрая с помощтта на запазените индекси се инизиализира друг масив, чрез който се отпечатва на конзолата максималната редица или редици.


от Tanya (202 точки)