3. Last K Numbers Sum от Lab (Programming Fundamentals)
Имам нужда от помощ. Намерих някакво решение на задачата от миналата година ,което не работи. http://pastebin.com/fWVbESLQ
Ако някой може да напише решението и да обясни логиката ще е супер.
Имам нужда от помощ. Намерих някакво решение на задачата от миналата година ,което не работи. http://pastebin.com/fWVbESLQ
Ако някой може да напише решението и да обясни логиката ще е супер.
Според мен най-добре да изгледаш следните материали, където лекторите решават точно тази задача https://softuni.bg/trainings/resources/video/10464/video-screen-4-october-2016-group-1-simeon-sheitanov-programming-fundamentals-september-2016 и другото видео е това : https://softuni.bg/trainings/resources/video/8808/video-screen-26-may-2016-svetlin-nakov-programming-fundamentals-may-2016
Успех, дано съм помогнал.
Горните линкове са полезни, но все пак ще поясня как бихме могли да я решим по доста праволинеен начин, и ще използвам това решение. Най-напред искаме да се уверим, че размерът на масива ще бъде достатъчен за по-големи стойности. Много грешки в този тип задачи произтичат от избор на тип данни, които притежават по-ниска граница от изискваната в системата. Затова ще използваме long
long number = long.Parse(Console.ReadLine());
long steps = long.Parse(Console.ReadLine());
Понеже при изчисленията ще се връщаме назад в масива, със steps обозначаваме броят връщания, които трябва да извършим. Следваме условието и инициализираме първият елемент със стойност единица
sequence[0] = 1;
В този момент, състоянието на масивът е следното (с индексите горе и стойностите долу)
0 1 2 3
[1][0][0][0]
Идеята в случая е да запълваме всяка следваща i-th позиция като се връщаме steps на брой пъти назад в масива. Докато се връщаме назад, събираме стойностите на елементите, започвайки непосредствено от последният инициализиран елемент (в кода, това е last). Започваме от позиция i = 1, защото в началото на връщането, първият елемент (с индекс 0) винаги ще бъде инициализиран с някаква стойност. Искаме връщането назад да се осъществява коректно, а това включва (a) точно steps брой връщания, и (b) връщане, при което няма да излезем извън рамките на масива. За (a) изброяваме връщанията като използваме toSteps, който се явява просто брояч на текущия брой извършени връщания. За (b) поставяме индекса на първия елемент (0) като крайна точка на връщанията. След това комбинираме тези две условия, (a) и (b). Единственото, което остава, е да итерираме назад в масива докато изброяваме броят стъпки, които са зададени по условие.
Благодаря за изчерпателния отговор!
Успя , с дебъгера ги чатнах :D
Супер полезно е първото видео с обратния for и акцента за long.