[Exam Prep I ] 01. Sino The Walker
Здравейте колеги, чудя се къде ми е грешката на първа задача от първия Exam Preparation. Дава ми 80/100 , а всички тестове които правя при мен излизат!
Ето го и кода:
https://pastebin.com/VQtCDG6X
Здравейте колеги, чудя се къде ми е грешката на първа задача от първия Exam Preparation. Дава ми 80/100 , а всички тестове които правя при мен излизат!
Ето го и кода:
https://pastebin.com/VQtCDG6X
Пробвай да промениш тези два реда:
int stepsTaken = int.Parse(Console.ReadLine()) % 86400;
int secondsPerStep = int.Parse(Console.ReadLine()) % 86400;
Внимавай с това да не Overflow-ва.
Int * int може да е равно на long
Това го взех в предвид , колега, но не става и така, точно при long ми дава грешка. По условие пишеше, че е в границите на int типа
Както каза колегата int*int прехвърля int. Променливата ти е double, но това не означава, че резултата който подава на double, наистина е double. Направи един каст на някоя от променливите -> пред променливата пишеш (double)
И аз бях тръгнал по тоя начин, но със TimeSpan. Ако ти сложат int.MaxValue като стойности или ще ти превърти и даде грешен резултат или ако сметките са правилни ще ти гръмне в DateTime, защото добавяш прекалено голяма цифра.
Не се бях сетил за хитринката дето е дала колежката, но е нормално имах 3 по математика :D
Та в крайна сметка си го реших по дългия начин със конвертиране в секунди събиране на времената и после конвертиране пак в изискваните стойности.
Ето го и моето решение. Малко по-оптимизирано е, защото добавям само секундите:
Получи се! Благодаря много, но ако е възможно да обясните защо се получи, че не ми стана ясно?
Здравей, причината е в Constrains на задачата. Стъпките и скоростта може да са 2147483647 * 2147483647 = 4611686014132420609, което няма да се побере дори в ulong. Затова махаме цели дни с помощта на деление с остатък (86400 секунди са 1 ден). По същия начин DateTime превърта дните в случая.
Ако имахме да кажем и колко дни ще са му нужни на човека да се прибере, навярно щеше да се ползва BigInteger .