Loading...
radybt avatar radybt 9 Точки

[Programming Fundamentals] 01.Exam Prep. Sino The Walker

Здравейте, ако може някой да ми разясни няколко реда от алгоритъма за пресмятане на секундите на Наков ще съм много благодарен. 

Виждам, че първо 

long seconds =  timeLeaving[2] + 60 * timeLeaving[1] + 60 * 60 * timeLeaving[0];

има връзка с 

var secs = seconds % 60; 

var mins = (seconds / 60) % 60

var hours = (seconds / 60 / 60) % 24;

https://pastebin.com/MpTsqhnR Код:

но някак не схващам от къде първоначално идват тези допълнителни събирания и умножения с 60. Схващам, че идеята е явно за да може след това да се разделят на 60 и че е някакъв алгоритъм, но не разбирам как работи като цяло. Едно обяснение би било оценено! 

EDIT: Мисля, че разбрах как работи всичко вече, но първия ред ми се струва описан доста объркващо, според мен този еквивалент е много по-ясен :

 long seconds = timeLeaving[2] + (timeLeaving[1] * 60) + (timeLeaving[0] * 60 * 60); 

Със скоби..

Тагове:
0
Programming Fundamentals 06/07/2017 18:07:09
Smytt avatar Smytt 29 Точки

Здравей.

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

Когато имаш, че сино се е прибрал за 12983 секунди (примерно) би било много по-лесно да добавиш този резултат към секунди и после тотала да превърнеш в минути и часове, отколкото да превърнеш 12983 в секунди, минути и часове и да ги добавяш поотделно. Шансът да объркаш така е много по-голям. За това е умножаването по 60.

а после деленето на 60 е точно обратната операция. Делиш на 60 с остатък и така си отделяш секундите, минутите и часовете.

А деленето на 24 е да премахнеш цялата част на "дните" защото те не се искат в отговора и за да избегнеш отговор от типа на 100 часа ХХ минути ХХ секунди.

0
filipov.v avatar filipov.v 25 Точки

За да не правя нова тема относно същата задача реших да пиша директно в тази. 

Проблемът е следният: реших задачата с DateTime, но поради някаква неясна причина ми дава 80/100. Ще се радвам ако някой успее да разгадае случая ;д ето е кода: https://pastebin.com/HKFpdGZv

0
msotiroff avatar msotiroff 136 Точки

Ето тук: int seconds = steps * timePerSteps; Ако steps и timePerSteps са максималните стойности по условие, то тогава произведението им seconds няма да се събере в int.

Освен това тук: leave = leave.AddSeconds(seconds); не е нужно да добавяш милиони секунди, при положение, че по условие не се изисква да се пресметне за колко дни ще се прибере лирическия герой. По този начин рискуваш да ти хвърли някой exeption. Просто използвай остатъка от делението на (секундите в един ден).

 

Успех.

0
filipov.v avatar filipov.v 25 Точки

Благодаря за помощта!

Сметнах ги чрез BigInteger, но трябваше да променя и единиците към decimal, за да се получи. Ето и работещия код, ако някой се интересува: https://pastebin.com/ZRdB2u9v

 

Поздрави.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.