Професионална програма
Loading...
+ Нов въпрос
IvayloBonchev avatar IvayloBonchev 5 Точки

C# Basics Exam 10 April 2014 Morning Problem 3 – Sunglasses

Някой може ли да ми каже какво ми е грешното в решението понеже аз като пробвам с примерните input получавам желаните output , но като го пусна в judge ми дава само 10/100

Решението ми е http://pastebin.com/BtUvJxjL

Тагове:
1
Programming Basics 25/04/2015 18:50:58
Innos avatar Innos 419 Точки

Математиката с която смяташ къде да изпечаташ моста между очилата е грешна.

Печаташ лещите в един For цикъл така че дължината на i ще варира от 0 до n-3 (или иначе казано до < n-2) трябва да намериш центъра на тази поредица и понеже n е нечетно, n-3 ще е четно по нагледно пробвай с пример нека n = 9  тогава трябва да намериш формулата за числото което е по средата между 0 и 6(9-3) включително, това число е 3 (0 1 2 |3| 4 5 6)

1
25/04/2015 19:26:51
IvayloBonchev avatar IvayloBonchev 5 Точки

при n=9 работи кореткно , но при n =11 и т.н. вече се получава разминаването . И на мен ми е ясно че нещо не нацелвам правилната формула за центърът ама хич не ми идва на акъл-а в момента какво точно трябва да е така че ако не ти е проблем би ли написал какво трябва да е правилното условие 

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Ивайло,

Висчко в решението си работи супер - колегата е прав, с изключение само на това:

            else if (i == n / 3)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write("|");
                }
            }

Ако тестваш с 13 ще видиш как моста ти се измества, не е в средата. Преизчислих ти този else if (i == n / 3)

и задачата даде 100 точки в judge. Можеш да си потърсиш друго изчисление за този if, или да видиш тук новия вариант на твоето си решение.

Иначе, поздравления - основният алгоритъм на решението си е супер!

 

1
25/04/2015 19:40:56
IvayloBonchev avatar IvayloBonchev 5 Точки

Благодаря за активноста и помоща ! 

Катя като отворих твоя линк с новият вариянт на моето си решение не виждам никакви разлики във въпросният else if спрямо моето си решение можеш ли да видиш дали случайно линка не е грешен или просто да напишеш като коментар какво трябва да е правилното съдържание на въпросният else if ? Иначе аз тествах с нечетни числа до 9 и нямаше проблем , сега пробвах с 11 и 13 и видях че наистина сте прави и центърът се измества !

1
JOHNY avatar JOHNY 196 Точки

До 9 работи, защото като разделиш n на 3 получаваш средата на очилата. 
След това вече се измества.

2
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Прав си Ивайло :)

оправих линка.

Това имам предвид:

            else if (i == (n - 2)/2)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write("|");
                }
            }
1
JOHNY avatar JOHNY 196 Точки

Честно да ти кажа - овъртях се от взиране да разбера всичките цикли, които си ползвал (на този компютър съм с XP и нямам visual, а dotnetfiddle не позволява breakpoints). Ще се опитам да го пусна и през студиото по-късно.

Ето ти един мой код, който е доста по-кратък и разбираем. Judge му дава 100 точки.

В същото време показва, че твоят код се дъни на някой от тестовете, което ще рече, че при конкретни стойности резултата не е коректен.

Както вече са отбелязали колегите - проблемът е, че печаташ моста винаги при n=3, а това не е вярното условие.

2
25/04/2015 19:39:36
IvayloBonchev avatar IvayloBonchev 5 Точки

Благодаря за това че си ми показал друг вариант за решение на тази задача ! Проблема е че този тип задачи съм се научил да ги решавам с вложени for цикли понеже съм начинаещ и на този начин на решение ме беше научил един познат и за това исках съвет спрямо моето решение ,че до утре надали ще успея да науча другият начин на решаване ! Иначе е пределно ясно че с тези for цикли решението е много по трудно и объркано за разлика от твоето !

1
JOHNY avatar JOHNY 196 Точки

Всъщност този код го писах с помощта на Катя преди около 20 дни - още в началото на курса.

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

Успех на изпита!

0