Problem 9. Stack Fibonacci
Може ли някой да ми поясни, защо кодът ми не работи ?
http://pastebin.com/8kjR6Ct3
В конзолката ми изкарава нулевите тестове правилни, а в джъдж всичко останало гърми :)
Може ли някой да ми поясни, защо кодът ми не работи ?
http://pastebin.com/8kjR6Ct3
В конзолката ми изкарава нулевите тестове правилни, а в джъдж всичко останало гърми :)
Въобще не разбирам тези "stSum" и "needless" какви са според имената им...
Просто Pop-ваш първото и второто число в стека, след което Push-ваш първото и сбора на първото+второто:
for (int i = 1; i < n; i++)
{
ulong first = fibNumbers.Pop();
ulong second = fibNumbers.Pop();
fibNumbers.Push(first);
fibNumbers.Push(first + second);
}
fibNumbers.Pop();
Console.WriteLine(fibNumbers.Peek());
stSum - сборът от двете числа.
needless - числото, което трябва да бъде премахнато (сиреч, второто число в стека)
Ако в стека има 2 | 1 - сборът е 3, needless е 1. След, което пушвам сборът и 2-ката. (2 | 3)
Мерси за отговора.
Сборът от двете числа го правиш като ги изтеглиш от стека, събереш и вкараш в стека.
Благодаря! А защо вариантът да сумирам целяи стек е не правилен, смисъл не се ли постига същия ефект ? Питам от любопитсво, не е с цел заяждане :)
Правилен е е от към логика, само дето трябва да пушваш първото число и сумата после, според мен.
Не е правилен от към производителност, въпреки че при конкретната задача едва ли имаш повече от две числа в стека на итерация. В случая Sum() не трябва да е част от API-то на Stack (подозирам, че е extension от System.Linq) и ще обиколи всички елементи на стека (в случая 2, в друга задача може да са 2000), за да ги сумира. Те ще остават в стека и ти после ще ги извадиш което са още две операции до общо 4. При вадене и ръчно събиране имаш 3 операции. В тези мащаби дали 3 или 4 няма значение, но учи на мислене, защото ако от 4 операции съумяваш да спестиш една, от 100 ще съумееш да спестиш 30 примерно :)
Не съобразих, че за сумирането трябва да обиколи целия стек :)
Много ти благодаря!
Въпроса ми е следния: защо накрая преди на Peek-неш правиш Pop() - нали по този начин пийкаваш n-1, а не n. Тоест при 7 вместо да върне 21 (както е в примерите), връща 13. От друга страна ако не попнеш в джъджа минава само нулевия тест, останалите гърмят. Нещо не мога да схвана логиката. Ако може да разясниш ще съм ти благодарен