Loading...
vdzhambazova avatar vdzhambazova 6 Точки

[Exam Problems] C# Basics - Problem{3} - The Explorer

Колеги, не мога да открия къде греша в кода. На моята конзола излиза както трябва, но в judge системата ми дава "Грешка по време на изпълнение" на всички тестове и съответно 0 точки.

Нарушена точка 12 от Правилата.

Тагове:
0
Programming Basics 16/10/2015 22:56:49
flashestswag avatar flashestswag 66 Точки
Best Answer

Здравей, промени си удебелените и оцветени от мен в червено стойности, така както съм ги задал и няма да имаш проблеми :)
Можеш да ги видиш, като прескочиш поясненията ми по-кода ти:

А искам само да ти кажа, че това е излишно: 
(int)Math.Floor(((double)n / 2)))
Замени го с:
n / 2
Първото (int)Math.Floor(((double)n / 2))) е еквивалентно на n /2, защото (double) n / 2 дава реално число, с Math.Floor() ти му взимаш цялата част и тая част я превръщаш в int, да ама n / 2 - деленето знака / , се нарича целочислено делене, той така или иначе ти връща цялата част, така че няма нужда от цялата по-горна операция, която си направила :)

Разкарай ги от целия ти код, тези Math.Floor-ове нямаш нужда от тях ползвай си обикновеното целочислено делене /. Както ти обясних по-горе защото е излишно, и така кода ти ще стане много по-лесен за четене :)

Имаш n реда, които трябва да изчертаеш.

Изчертаваш най-горният и най-долният ред (общо 2 реда) и между тях ти остава да изчертаеш още (n - 2) реда.
Останалите вътрешни (n - 2) реда ги изчертаваш с два цикъла:

В първият цикъл, външните тирета намаляват, а вътрешните се увеличават.
Във вторият цикъл, става обратното, външните тирета се увеличават, а вътрешните намаляват.

И сега въпроса е колко реда трябва да изчертае първия цикъл и колко реда втория цикъл?
Първия цикъл трябва да ти изчертае: (n / 2) реда
А втория с един по-малко от първия, тъй като първия изчертава и средния ред на ромба. Тоест: (n / 2) - 1.

Как получваме, че първия цикъл трябва да изчертае (n / 2) реда, а втория ((n / 2) - 1) ?

(n - 2) са редовете без първия и последния, тоест вътрешните редове, тях ги разделяме на 2 и получаваме: ((n -2) / 2), това са броя на симетричните около средния ред, редове.
След това понеже първия цикъл ще изчертава и средния ред, добавяме + 1: ((n - 2) / 2 + 1).
Във втория цикъл няма среден ред, затова при него не добавяме нищо и той си остава: (n - 2) / 2.

Или получихме за първия цикъл:
((n - 2) / 2 + 1) = ((n / 2) - (2 / 2) + 1) = ((n / 2) -1 + 1) = n / 2 реда
А за втория цикъл:
(n - 2) / 2 = (n / 2) - (2 / 2) = (n / 2) -1 = n / 2 - 1 реда

A относно това:

        //Middle
        int outerHyphens = (int)Math.Floor((double)(n - 3) / 2);
Имаш n позиции за втория ред, от тях изваждаш 3, тъй като 3 са символите в средата на втория ред: *-*
и ти остават n - 3 позиции за външните тирета, като половината от тях са отляво, другата половина са отдясно, или:

int outherHyphens = (n - 3) / 2;

Общо взето това е :)

 

Нарушена точка 12 от Правилата.

2
16/10/2015 22:57:11
vdzhambazova avatar vdzhambazova 6 Точки

Благодаря много за подробния и коректен отговор :)

1
PavelManahilov avatar PavelManahilov 216 Точки

При въведени стойности по-големи от 9 някой от броячите ти става отрицателен и затова гърми

2
16/10/2015 12:46:55
vdzhambazova avatar vdzhambazova 6 Точки

Това е, да :)

Благодаря за коментара.

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