[ExamPreparation] - 12 July 2015 - Решения
Здравейте, колеги.
Ето и кода, който обещах да ви изпратя. Първите три решения са на Трифон : )
Успех!
Здравейте, колеги.
Ето и кода, който обещах да ви изпратя. Първите три решения са на Трифон : )
Успех!
Благодаря за решенията. Аз бях на лаба, на който трябваше сами да решаваме задачите. Някои хора се захванахме с решаването на 5-та задача със стрингове. Вкъщи като се прибрах я помислих и я реших. Споделям решението си, което дава 100 точки в джъджа.
Числата обаче в двоична система ми се получиха с една единица отпред, затова използвах substring, който да реже първата единица. На какво се дължи тази допълнителна единица? Някой от циклите ли съм завъртяла повече?
Здравейте,
можете ли да ми дадете малко разяснение на задачата, сигурно 1000 пъти прочетох условието и гледах как е решена, обаче нито в условието, нито в кода мога да се ориентирам. Примерно едно нещата, което не мога да разбера е използването на масив в побитовите операции, не мога да му хвана самия начин на изпълнение. Много ще съм благодарен за помоща.
Поздрави
За 5-та задача става въпрос, вероятно? В побитовите операции не използвам масив, масив има единствено в началото, защото така идват числата от джъджа. Примерно 19 29 39 49 идват на един ред, разделени със спейс, аз използвам .Split(), за да разкара спейс-а и да ми създаде масив, от който мога да взимам елементите един по един. Масивът е с дължина от 4, където числото 19 е на позиция 0, а числото 49 на позиция 3 (дължината на масива минус едно). След това във фор-цикъла увеличавам итератора с 2, вместо с 1. Защо го правя - така мога да взимам числата по двойки, както и условието на задачата изисква. Първо ще вземе числата на позиция 0 и 0 + 1, това са 19 и 29, след това ще се увеличи с 2 (i += 2) и ще вземе следващата двойка - на позиции 2 и 2 + 1. Друг масив не виждам да има.
Да, да много ти благодаря, наистина много ми помогна, жалко, че не мога да ти дам 5 like :) Можеш ли, да ми разкажеш за действието на този цикъл, всъщност как ги сравнява самите числа ( for (int bitIndex = 0; bitIndex < 63; bitIndex += 2) ) ?
Да, увеличава се с +2, за да взима само битовете на четни позиции (0, 2, 4, ... 62), така е по условие на задачата. Как взима самите битове - на този линк http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/ има подробни обяснения за всякакви битови операции - разгледай го. Накратко - мести цялото число колкото позиции надясно е необходимо и го сравнява с числото 1. Ако резултатът е 0 - значи битът е бил 0, респективно и при бит, който е единица. След това в условието на if-a проверяваме дали битовете са различни - само тогава се налага да ги променяме.
Не, циклите са окей. Пробвай още най-горе да смениш .PadLeft(64, '0') с .PadLeft(63, '0'). Имаш го на две места.