Loading...
nikolaykaradzhov avatar nikolaykaradzhov 1 Точки

Technology Fundamentals with C# (05. Top Integers) Arrays Excercise

Здравейте,

1. Условие - Write a program to find all the top integers in an array. A top integer is an integer which is bigger than all the elements to its right.

2. Пример 

Input

Output

1 4 3 2

4 3 2

14 24 3 19 15 17

24 19 17

27 19 42 2 13 45 48

48

Имам проблем със задача 05. Top Integers от раздел "Arrays" - Еxcercise, като не печатам последната цифра, защото няма след това, не мога да измисля логика да печата и последната цифра от дадения масив.

И моя код : https://pastebin.com/pKp8g03u

 

Благодаря предварително

Тагове:
0
Fundamentals Module
arjunah avatar arjunah 9 Точки

Здравей, проблемът е в булевата променлива - началната ѝ стойност е false и затова при последната итерация на първия цикъл (когато i = array.Length - 1 и се пропуска вътрешния цикъл (понеже j = i + 1 и j < array.Length)) булевата променлива си остава false, въпреки че за последното число от масива тя трябва винаги да е true, за да се отпечата и то при изхода. Ако я промениш с начална стойност true и смениш знака на проверката if (array[i] <= array[j]) ,тогава всичко ще си дойде на мястото. (Тук вмъквам, че числото трябва да е само >, а не >= на някое от следващите, за да е top integer)

Ето и точно какво имам предвид:

           bool isBigger = true;
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[i] <= array[j])
                    {
                        isBigger = false;
                    }
                }

Тествах кода ти така и дава 100/100 в Judge :-)

0
VasilKotsev avatar VasilKotsev 830 Точки

ЕДИТ: В грешка съм, не дочетох условието.

Май не сте научили добре тези цикли в бейсикс... Прекалено много усложнявате задачата сами с тези вложени цикли.

Няма ли да е по-лесно така:

for (int i = 0; i < array.Length - 1; i++)
{
    bool isBigger = array[i] > array[i + 1];

    if (isBigger)
    {
        Console.Write(array[i] + " ");
    }
}

Console.Write(array[array.Length - 1] + " ");

Защо ви е да въртите ненужни итерации ?

0
06/02/2019 21:20:53
ddragov avatar ddragov 6 Точки

Здравей,

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

bool isBigger = true;
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[i] <= array[j])
                    {
                        isBigger = false;
                        break;
                    }
                }

 

0
VasilKotsev avatar VasilKotsev 830 Точки

Доста си се оплел с тези вложени цикли... Вложения цикъл итерира Length - (i + 1) ненужни пъти, така обикаляш остатъка от масива, което няма никакъв смисъл. Хубаво си се сетил да ползваш флаг/булева дали числото е по-голямо. По-лесно ще е да въртиш един цикъл до Length - 1 и да проверяваш дали числото на текущия индекс е по-голямо от това отдясно. Не съм чел условието и се ориентирах само по примера, изглежда че числото на последния индекс е винаги по-голямо и трябва да бъде изписано. Можеш просто да го изпишеш на конзолата след тялото на цикъла. Ето как бих я решил аз: Link 100/100. Можеш и с проверка да проверяваш дали индекса на текущата итерация е предпоследния в масива и просто да добавиш последното число.

0
06/02/2019 20:49:03
arjunah avatar arjunah 9 Точки

Здравей, решението ти в случая не е коректно, понеже се иска да се отпечата всяко число, което е "bigger than all the elements to its right", а твоят код печата всяко число, което е по-голямо само от съседното му отдясно. Затова е нужна обиколка с вложен цикъл от индекс j = i + 1 до края на масива. И ако погледнеш Details на резултата от кода си в Judge (който наистина дава 100/100, но това явно е защото изходът от judge на тестовете, които влизат в крайната оценка, по случайност съвпада с твоя), ще видиш, че на zero test #3 дава грешка. Може да погледнеш очаквания input и твоят output.

Освен това, решението ти е с методи и с List, които не се учат до лекцията за масиви :-)

0
VasilKotsev avatar VasilKotsev 830 Точки

Да, в грешка съм, не дочетох условието от колегата и ми е избягал този "all". Значи не съм бил прав, да, трябват вложени цикли ако е това условието. Странно защо тогава няма нито един unit test, който да покрива такъв случай освен третия нулев тест, това е пропукс от хората, които са писали задачата. Можете да докладвате, че има грешка и че такъв реален тест няма. Защото моето решение минава с максимален брой точки, а не трябва.

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