Loading...
Baseplate23 avatar Baseplate23 2 Точки

Draw Fort

 Здравейте, имам следния проблем със задачата "Draw Fort"  - https://judge.softuni.bg/Contests/169/Coding-101-Exam-6-March-2016

Когато напиша кода и  изчисля броя долните черти, които се намират на първия и предпоследния ред по "своя" формула и въведа число, показаното от конзолата изглежда така, както би трябвало да изглежда според примерите, дадени в условието - http://pastebin.com/LXJ9EhXN . Но, след като го пусна в Judge дава 30/100 точки, незнайно защо, но Judge не ми дава да видя кога извежда грешни резултати, ето screenshot: http://prikachi.com/images.php?images/476/8826476W.png

Когато изчисля броя на долните черти по формулата, дадена в решението на задачата дава 100/100, та въпроса ми защо на моя код дава грешка и има ли как да видя каква е?

Поздрави :)

 

Тагове:
0
Programming Basics
YavorSpassov+deleted! avatar YavorSpassov+deleted! 133 Точки

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

Това е моето решение: http://pastebin.com/UacivWgv

1
07/07/2016 02:25:58
t_zhelev avatar t_zhelev 24 Точки

Изтествах ти кода и изглежда, че формулите ти бягат някъде. Например като вкараш 6 - печата замък с ширина 13 вместо 12. Като вкараш 10 прави замък с ширина 19 вместо 20. За съжаление нямам време да прегледам в момента целия код, но като цяло ми изглежда, че ползваш грешни формули. За изчисляването на броя ^ и _ в кулите просто раздели n*2-4 на 3 (4 бидейки броя наклонени черти).

0
borislav9212 avatar borislav9212 745 Точки

Няма как да видиш какава е от тестовете. Можеш да провериш граничните зони как са. Имаш много излишни проверки със "if" Може малко да съкратиш кода. Някъде имаш грешки във формулите. Ето и от мен един код -> http://pastebin.com/1PdYvg6h

1
Plamen27 avatar Plamen27 599 Точки
Много оптимизирано решение, браво. +1 от мен.
1
Plamen27 avatar Plamen27 599 Точки

Здравей, ето фикса на твоя код:

http://pastebin.com/1CRfCypn

Измененията са оградени с комент черти: ///////////////

Това между тях е изменения код и съответно твоят изтрит.

Ако нещо не ти стане ясно питай, макар, че мисля че ще се ориентираш.

Докато четях кода ти си помислих, че докато си го писал или си бил на няколко ракии или си го писал късно посред нощта.

Като видях от кога е поста ти всичко ми стана ясно :)))))) laugh

P.S:

Основната грешка при теб са долните черти по средата.

Ако разбием въведеното n число на групи по 2 както трябва да се получава, трябва да бъде:

                 n =                    ( 3 4)  ( 5 6) (7 8) ( 9 10).................

брой долни черти  =         0        2      4       6    ..............

При тебе беше:

             n =                   ( 3 4)  ( 5)  (6 7 ) ( 9 10).................

брой долни черти  =     0      2      3        4    ..............

1
07/07/2016 11:59:52
Baseplate23 avatar Baseplate23 2 Точки

Благодаря за отговорите и за фикса!

Единственото, което не разбрах, е как стигаш до формулата за изчисление на долни черти:  2 * n - (2 * (n / 2) + 4   ?

В предишните упражнения на "чертане на фигури с цикли" формулите не са толкова сложни и повечето са дадени в условията за по-лесно ориентиране laugh

Поздрави

0
Plamen27 avatar Plamen27 599 Точки

Формулата (2 * n - (2 * (n / 2) + 4)) изглежда страшно, но всъщност само привидно.

За да стигнем до нея правим следните разсъждения:

Знаем, че ширината на форта ни е 2*n (броя на колоните) затова от него изваждаме 2 пъти  по n/2, като n/2 е вътрешната дължина на кулите, тъй като те са 2 става 2*(n/2) и още изваждаме 4 неизменни символа: / \ / \  които винаги присъстват.

За средата на предпоследния и последния ред важи същата формула.

0
Baseplate23 avatar Baseplate23 2 Точки

Благодаря, от обясненията ти разбрах каква трябва да е формулата и направих своя собствена laugh, от която даде 100/100, тя е:
 

            var n = int.Parse(Console.ReadLine());

            int multiplyN = n * 2;
            int myLines = multiplyN - (n + 4);
            if (n % 2 == 1)
                myLines++;

и печатането:

            Console.Write(new string('_', myLines));

 

0
Plamen27 avatar Plamen27 599 Точки

Браво. Значи всичко е плодотворно и от полза. Успех.

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