[Exam Problems] C# Basics - Joro The Football Player - Runtime Error
Здравейте,
Някой може ли да ми каже защо, когато събмитвам в джъдж-системата ми дава постоянно на два от тестовете "Runtime Error"? Не мисля, че някъде се препълват стойностите (поне не мога да открия къде може да става подобно нещо). Ето линк към едно от съобщенията на системата: тук
Грешката ти е, че в output-а печаташ излишни неща. Печатай само искания резултат, както е посочено в условието на задачата:
On the only output line you must print an integer...
без да го украсяваш /както ти си направил в случая Console.WriteLine("Joro will play football in {0} days of the year!", totalDaysPlay + 3); - отпечатай само числото и няма да имаш проблеми.
Това е принципа на judge системата - не печатай нищо, което не се изисква в задачата. Спазвай абсолютно точно изисквания формат.Навсякъде, където имаш операция деление, трябва да сложиш реален тип числа - double. При теб това са hollydayPlay и normalWeekPlay. Освен това при самото деление трябва да посочиш, че извършваш деление на реални числа, за да не се получи целочислено деление. Т.е. нещо такова (копирам само редовете, в които трябва да се промени нещо):
int p, h, naSeloPlay;
double hollydayPlay, normalWeekPlay, totalDaysPlay; (тези са дробни)
string year;
hollydayPlay = p / 2.0; (2.0 посочва, че искаш за резултат реално, а не цяло число)
naSeloPlay = h;
normalWeekPlay = (((52 - h) * 2) / 3.0); (аналогично ползваме 3.0)
totalDaysPlay = hollydayPlay + naSeloPlay + normalWeekPlay;
Накрая, понеже се иска резултатът да е цяло число, totalDaysPlay може да го обърнеш към int или да му вземеш Math.Floor, т.е. вземаш цялата му част.
Грешка се получава защото ако събереш 3/2 + 3/2 например, ако е целочислено делението резултатът ще е 2 (1+ 1), а трябва да е 3 (1.5 + 1.5). Но това не би трябвало да важи за всички тестове в системата.
Получаваш 0 точки, защото си спазил условието, но не и примерите. Тази задача е с грешно зададен алгоритъм в Judge, т.е. недоглеждане на автора.
Когато смяташ normalWeekPlay, ти умножаваш накрая по 2 (което е по условие и е вярно), но в примерите е показано, че не се умножава по 2, т.е. реално Жоро не играе и двата дни в тези уикенди. Има разминаване между текстовото условие и примерите, за да ти работи задачата в Judge трябва да следваш примерите и да махнеш двойката. Вероятно само с тази промяна би трябвало да получиш някакви точки с твоя код, но няма да са 100 предполагам. Като оправиш и променливите, които трябва да са double, тогава вече ще може да вземеш 100-те точки.
И да, това, което е посочил колегата - Judge не толерира излишни неща в output-a, трябва да му подадеш само това, което се иска - в случая едно число и нищо повече.
Благодаря ви много за отговорите
Утре ще го оправя и ще го тествам, че вече е късно и не ми се занимава.