C# Part1 Exam Feb 02 Feb 2015 Evening => Problem 2 /Encoding sum.


0
Ще се радвам ако някой ми посочи къде ми е грешката при решаването на тази задача. http://pastebin.com/mABzxgju  На изпита стигнах до тук, което всъщност ми е решението и нулевите тестове минават. Нещо някакво парсване явно бъркам и дори и да се опитвах много пъти да пробвам ралзични комбинации все не успявах да полуа точки. Сигурно е някаква грешка, която фундаментално аз не рабирам, но пък фаворит вероятно за най-смешните решени задачи, които не са донесли никакви точки :) Благодаря.



Отговори



3
http://pastebin.com/DsS1uqhk Това е моят код. В момента чета твоя и ще ти съобщя веднага щом видя нередност!

След няколко минути кьорене, най-сетне ти открих грешката...

Познай?

При else if (c == 'K') { sum += 10; }
            else if (c == 'k') { sum += 10; }
            else if (c == 'L') { sum += 11; }
            else if (c == 'l') { sum += 11; }

голямото L ти стоеше на += 10; което разбира се не е вярно, и тъй като във всички тестове Lorem ipsum има L, сметките веднага умират, дори и за такава малка разлика от 1 единица. Успех!

С оглед на горе споменатото, те съветвам вместо да пишеш всичко на ръка и да допускаш грешки, което е много вероятно, най-добре да оставяш компютъра да извършва сметките, вземи моя пример - вземам буквата от ASCII таблицата и изваждам първата буква (А; а) от там, еми стойност отговаряща на разликата - идеално, аз не пиша 30 реда код за сметки и в същото време става бързо.

от Pip3r4o (3392 точки)


2

При четене може да ползваш:

string text = Console.ReadLine().ToLower();

Така е достатъчно да правиш проверка само за малки букви ;-)

ето моето РЕШЕНИЕ


от jokerbg (383 точки)

1
Убий ме, кьорех се и аз и не можах да го видя. Иначе е очаквано при толкова дълга условна конструкция и хардкоднати стойности да се обърка нещо.

от lnxslackware (416 точки)



3

//Заради условието за модула (n) e, виж примерите по-долу, всъщност не взимаш остатъка. 

//RESULT = 565 % 2001( ) = 565

//RESULT = 4520 % 2001(-) = 518

//RESULT = 518 % 2001()) = 518

Aко @ направо му давай return, с него излизаш направо от Main метода.

 Евала те @Pip3r4o това е.

@messenger , сори, ако нещо коментарът ми ти се е сторил некоректен. Баце, решил си я, браво.

 

И все пак, защо не пробваш с:

char[] ch = input.ToCharArray();

char.IsDigit

char.IsLetter   :)

char.IsControl


от Absend (777 точки)


0
ще имам предвид и тези препоръки. благодаря за тях!

от messenger (552 точки)


1

Като цяло проблемът май се оказа в хардкодването. В общия случай не е много хубаво да пишеш толкова еднакви редови код, понеже трудно се проверява, лесно се пропуска по нещо.

Добре е да си разделяш кода на прости компоненти, така ще е по-ясно какво прави и ще има по-малка вероятност да се нещо да се обърка.

П.С. като видя повече от 2-3 навързани условни и се плаша. Решението ти е quite epic, не точно по добрия начин, но все пак.. :D


от kon.simeonov (5238 точки)