[Exam Problems] C# Basics - Bit Shooter
Може ли някой да ми помогне за тази задача.Ще съм Ви благодарен.Моят код:
https://github.com/ePeev/Softuni-EXAM/blob/master/BitShooter
Може ли някой да ми помогне за тази задача.Ще съм Ви благодарен.Моят код:
https://github.com/ePeev/Softuni-EXAM/blob/master/BitShooter
Здравей,
Видях няколко грешки, след поправката изкара 100 точки в judge-a.
1. на 13-ти ред - трябва да е bit <= center + size;, иначе пропускаш последния.
2. на 17-ти - вместо n = n & ~(ulong)(1 << bit); направи n = n & ~((ulong)1 << bit); Изглежда безумно, но истината е, че 1 е 32-битов интегер, който ти се опитваш да преместиш примерно 58 пъти наляво и чак след това да кастнеш резултата към ulong.
(ulong)1 e 64 бита и няма такъв проблем : )
3. първият брояч брои десните, а вторият - левите. При теб е обратно : )
Здравей.
Това е моето решение: http://pastebin.com/2dN1vDQU В момента нямам време да разгледам подробно твоето и да открия грешката, но утре ще мога, ако все още е нужно.
Утре ще мога да разгледам кода ти, но успя ли да разбереш къде точно е проблемът? Не посочваш с какво си срещнал затруднения. Алгоритъмът изглежда верен, но си мисля, че с този ulong и изместванията накрая може да се получи проблем.
Ако наистина там се получава неточност, може да подходиш по няколко начина. Единият е да ползваш long вместо ulong, в двоична бройна система числото не се променя, но ще си спестиш проблемите, които се получават понякога при изместване наляво на unsigned типове.
Едит: Имаш и една логическа грешка - левите битове са тези от 32 до 63, десните са от 0 до 31, индексацията на числата започва отдясно наляво. Освен ако в условието не е казано друго (че съм го позабравил), трябва да смениш броячите в циклите.
Благодаря много на всички!!Весели празници!