[Exam Problems] C# Basics - Problem{5} - Bit Builder
Здравейте, колеги.
Може ли някой да ми каже, защо това решение ми дава само 10 точки в Judge и как да го направя да работи коректно?
При примерните данни от условието работи коректно.
Видях авторското решение и знам, че задачата може да се реши по друг начин, но искам да знам как може да се направи и така.
Ето и линк към Judge:
Благодаря Катя!
Много се радвам, че се получава и така задачата.
Поздравления за идеята! - иначе дребни уточнения по кода в началото е нормално да се налагат.
Много благодаря!
Сега се сетих да попитам дали е разрешено по време на изпита да копирам и използвам част от тази задача (или от някоя друга), която съм решавал и имам на лаптопа си. Примерно, ако част от задачата ми на изпита е да променя бита на дадена позиция да си копирам flip.
На изпита можеш да копираш всичко отвсякъде - от интернет, от форума, от твои предишни решения, от github repository (твое или такова което използваш за справка) - идеята е, че никой от нас не измисля или създава нов C# синтаксис, ние само интелигентно използваме, в нови ситуации познат код или код производен на този който вече познаваме.
А за конкретното решение - пропуснах да ти кажа, че проверката за quit команда трябва винаги да се прави преди каквото и да било прасване или опит за ползване на input - защото нормално в поне един тест на задача от този тип първата и единствена команда ще ти е quit.
За проверката се усетих след като прочетох отговора ти и я корегирах.
Ето го и решението, което дава 100 точки:
http://pastebin.com/drusJuc2
Благодаря отново.
Здравейте,
Линка към задачата не е актуален вече, ще може ли да качите пак решението ?
Мерси предварително!
Ето го: http://pastebin.com/T3dJ4RCK
http://pastebin.com/9rAFbvVf
Сега ми дава 60 и още повече нямам идея защо ..
Видях какво беше постнал вчера, но нямах време да отговоря. На въпроса проблемите са няколко 1во гърми ти 1 тест с runtime error това е защото не си се подсигурил за възможността в инпута да ти подадат веднага "quit" като 1ва команда, след като си влезеш в цикъла проверяваш, но още първото четене преди цикъла няма проверката. Другите проблеми бяха следните:
не си покрил случайте в който нека да кажем имаме int.max (32 та бита са единици) и ти подадат insert командата тогава ще имаш 33 бита единици, но понеже ползваш int няма как да ги побереш и най-лявата ще се изреже което ще доведе до грешен резултат.
Някой неща също за които да се внимава при битовите задачи е bitwise shift операторите << и >>, когато искаш да шифтваш с над 31 позиции левия операнд трябва да е задължително long или ulong и още нещо специфично тъй като забелязах че използваше повече >> шифт. Има специфика че ако числото е отрицателно (sign bit-а му е 1ца) се изпълнява arithmetic shift (ако примерно 31 ти бит е единица и шифтнеш надясно новия бит който ще се появи на 31 позиция ще е 1 вместо 0 за да запази отрицателността на числото), но това са подробности.
Ето едно преработване на решението ти от вчера което направих.
http://pastebin.com/psDwkez6
къде ми е грешката , дава само 30 не ми е ясно защо става така