Java Retake 08.05 проблем със задача 4 Royal Accounting
Здравейте колеги,
Вчера на изпита ми се случи нещо доста странно .
Това е решението ми http://pastebin.com/y6mU992g.
Проблема ми е с първият нулев тест.Когато пусна задачата при мен излиза вярно решение, но когато я кача в judge output-a е различен http://postimg.org/image/4trt01x35/.Като цяло judge ми дава 20 точки , тъй като не са качени още тестовете не знам дали това оказва влияние в/у точките ,но е интересен казус.Ще се радвам ако някой може да му обясни каква е причината.
Благодаря предварително.
http://pastebin.com/R0VhjhWR :)
Супер е! Накрая функционалната част e яка! :)
Добро решение, браво. А дали някои е решил 2 - ра задача за 100 точки?
Заповядай :) - клик
Eто код на втора за 100
http://pastebin.com/q0K5Y3UE
@Mhristoforova ,сега ти видях решението дори няма смисъл от if else при слагането в map-a.
иначе е доста добра идеята за array list за 2та признака по които се сортира , аз подходих селската като направих нов мап :D
Така, тестовете и авторското решение вече са качени и забелязах нещо много интересно:
Решението с тип double не е правилно според условието на задачата!
Много ми е любопитно защо трябваше да дават такива стойности и да се налага да се мъчим със BigDecimal, със спецификите на divide метода и закръглянето, като съм сигурен че много от хората на изпита не са били добре запознати с този клас и в лекциите се разглежда съвсем повърхностно. Или това е грешка в условието на задачата. Каквато и да е истината, това е доста некоректно и лично на мен това ми отне много време и нерви, вместо да се концентрирам върху алгоритъма на задачата.
Аз я реших с double и ми даде 100/100
http://pastebin.com/F3QAXRKK
Не казвам че не може да се реши с double, а че условието е подвеждащо. Ако се придържаме към него трябва да използваме BigDecimal, за да може да побере евентуално големи входни данни. Или условието е сгрешено, или тестовете не са коректни и са направени така че да минават с мноооого по-малки стойности. Тествай със максимални стойности и виж дали резултатът ще е верен. Пробвай дори само с един ред вход да въведеш 9223372036854775808, което е 2^64 и да видиш какво ще ти изведе. Самия double не може да запази такава стойност, а ще ти смени всяка цифра след 16тата с 0.
Прав си , но за мен е още по-некоректно това , че payment-a и hours-а могат да бъдат негативни , което е абсолютно нелогично , кой работи отриц. часове или надник . Мен това ми коства 20т не е кой зн кво ама все пак.
не би трябвало да гледаш меко казано безсмисления текст когато решаваш задача. Той е сложен за забавление и отпускане. Гледаш си какви са ти входовете и кви изходи искат от тебе и не те интересува логично ли е или не. Все пак изрично пише, от минус еди колко си до плюс еди колко си...също така може да питаш и квестор за възможните входове...
С опита съм установил, че преди да започнеш да пишеш код е важно да избереш правилно типа данни, които ще използваш - първо да могат да поберат входните данни и второ да поберат най-голямата (съотв. най-малката за отрицателни стойности) възможна стойност в програмата. Това ти спестява много главоболия, особено когато се наложи да смениш примитивен тип с клас (като BigInteger или BigDecimal) и да правиш многобройни ръчни корекции по кода.
Както и да е, смятам че тази задача е малко над нивото на този курс и тестовете са така направени, че да може да се реши с грешен тип данни.
Напълно съм съгласен с теб. Не е редно да се подават грешни данни.
Също така е редно да не се възползват от това, че са писали тестовете и знаят, че минава с double а трябва да си предоставят решение отговарящо на constrains.
И ще си позволя да цитирам колегата cone8
Постоянно ни се повтаря как трябва да се иползва Big Decimal при работа с пари, защото иначе се получават загуби и това води до неточност.
При така зададените стойности, колегите, изготвили въпросната задача показват реално, че какво се говори на лекции и какво се очаква от нас са 2 различни неща.
И ще бъда благодарен ако някой ме упъти, как да си коригирам закръглянето. Защото при 2 случая в 4 и 5 тест.
При 1 отбор, 1 служител закръглянето е нагоре вместо надоу. Но пък всичи останали са си ок.
Пробвам повечето варианти за закръгляне но се чупят осталите данни.
http://pastebin.com/gZv57WkQ
Разгледах няколко решения, но ще бъда благодарен ако някой предложи такова, решено с BigDecimal и без да е кастнато към double. И възможно ли е?
Благодаря птедварително
Заповядай :)
Мерси. Видях, че беше го постнал по-рано. Но ти кастваш към double при което се получава загуба.
И все пак би ли ми обяснил защо? Явно при този случай работи, но каква ти е била логиката за да го използваш.
Не ме разбирайте погрешно, опитвам се да разбера, В какъв случай бихме кастнали към double, защото това си е равносилно на използване на double и по какво в условието се разбира това, защото това си е задача за 80/100. Колко от нас на изпит би ни минало през главата да направят подобно нещо?
Не знам какво имаш предвид, единственото нещо което каствам към double е числото 24, преди да го вкавам в BigDecimal
Интересен въпрос колеги, имах малко време по време на изпита и реших да го запълня като пробвам изпита и аз забелязах идеята за BigDecimal в 4та задача. Тук ще спомена че съм съгласен с идеята че задачата трябва да се реши с BigDecimal за да се спазят constraints-a напълно и резултата е че задачата може да се реши за 100 точки чрез BigDecimal, което лично според мене е правилният начин.
Спрямо въпроса за BigDecimal - да затруднява писането, но не би трябвало да е огромен проблем, като се вземе в предвид че вече най-вероятно сте го използвали на 2ра задача, а и е материал който се изисква за изпита. В крайна сметка ако сте си написали правилно логиката дали сте използвали BigDecimal или double няма да има резултат върху точките Ви, а за хората които са използвали BigDecimal предполагам могат да вземат моралната награда че са си спазили спецификацията дори и да няма тестове за нея.
Благодаря за отговора. Има ли възможност да ни предоставиш твоето решение