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

Problem 9. Stack Fibonacci

Може ли някой да ми поясни, защо кодът ми не работи ? 


http://pastebin.com/8kjR6Ct3

В конзолката ми изкарава нулевите тестове правилни, а в джъдж всичко останало гърми :)

Тагове:
0
C# Advanced
msmilkoff avatar msmilkoff 338 Точки
Best Answer

Въобще не разбирам тези "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());

 

0
24/02/2017 10:39:45
TomaTomov_91 avatar TomaTomov_91 9 Точки

stSum - сборът от двете числа.
needless - числото, което трябва да бъде премахнато (сиреч, второто число в стека)

Ако в стека има 2 | 1 - сборът е 3, needless е 1. След, което пушвам сборът и 2-ката. (2 | 3)

Мерси за отговора.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Сборът от двете числа го правиш като ги изтеглиш от стека, събереш и вкараш в стека.

0
TomaTomov_91 avatar TomaTomov_91 9 Точки

Благодаря! А защо вариантът да сумирам целяи стек е не правилен, смисъл не се ли постига същия ефект ? Питам от любопитсво, не е с цел заяждане :)

0
RoYaL avatar RoYaL Trainer 6849 Точки

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

Не е правилен от към производителност, въпреки че при конкретната задача едва ли имаш повече от две числа в стека на итерация. В случая Sum() не трябва да е част от API-то на Stack (подозирам, че е extension от System.Linq) и ще обиколи всички елементи на стека (в случая 2, в друга задача може да са 2000), за да ги сумира. Те ще остават в стека и ти после ще ги извадиш което са още две операции до общо 4. При вадене и ръчно събиране имаш 3 операции. В тези мащаби дали 3 или 4 няма значение, но учи на мислене, защото ако от 4 операции съумяваш да спестиш една, от 100 ще съумееш да спестиш 30 примерно :)

0
TomaTomov_91 avatar TomaTomov_91 9 Точки

Не съобразих, че за сумирането трябва да обиколи целия стек :) 

Много ти благодаря!

0
HristoGrigorov avatar HristoGrigorov 8 Точки

Въпроса ми е следния: защо накрая преди на Peek-неш правиш Pop() - нали по този начин пийкаваш n-1, а не n. Тоест при 7 вместо да върне 21 (както е в примерите), връща 13. От друга страна ако не попнеш в джъджа минава само нулевия тест, останалите гърмят. Нещо не мога да схвана логиката. Ако може да разясниш ще съм ти благодарен 

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