[C#] Exams - Tasks 5 - Solutions


2
Здравейте, реших да кача моите решения на задача 5 от всички изпити от C# Part One в BGCODER, като изключим тази за Subset Sum. Всички решения дават 100/100 в BG Coder, но с уводолствие бих чул мнението на по напредналите в материала :)
А относно начинаещите като мен, ако някой има нужда от помощ може да ме пита на ЛС, тъй като все още нямам навика да пиша коментари по задачите :)
https://github.com/CuST0M1z3/CSharpPartOneTaskFive



Отговори



2

В едната задача забелязах дълги участъци повтарящ се код (или подобен): https://github.com/CuST0M1z3/CSharpPartOneTaskFive/blob/master/5.%20AngryBits/AngryBits.cs. Може би трябва да ползваш методи и да намалиш повтарящия се код? Просто предложение.

Наков


от svetlin.nakov (31978 точки)


0
Да имам такива моменти, но още не съм разгледал подробно методите и се въздържам от изполването им, благодаря :)

от Yordan.Bonev (780 точки)


0

Ето едно решение на Fall Down и от мен (100/100). Download
 Правя следното:
- След като въведа входните данни, ги поставям в масива int[ ] input.
Декларирам една матрица с осем реда и осем колони int [ , ] matrix ,която ще пълня с входните данни. Декларирам и матрицата int[ , ] output, която по-късно ще пълня с вече падналите битове,които ще дадът крайният резултат.

Идеята ми е следната.За всеки ред имаме число.Целта ни е да намерим на коя колона от съответния ред ,т.е на коя позиция имаме 1-ца, защото входното число се състои от сумата на степените на двойката,а тези степени са от 0 до 7,колко са и нашите колони.Например ако числото е 255, то тогава на целият ред ще имаме 1-ци (8 на брой),защото
255=2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7  (2 на степен от 0 до 7)
Ако числото е по-малко или равно на 2 на степен номерът на колоната, то тогава на това място от матрицата поставям 1 и след това вадя от входното число това число,което отговаря на позицията(2^колоната) и продължавам натам , до 0 .Това го правя от 7-ма колона до 0-ва ,докато  намеря двоичното представяне на числото(нули и единици на ред от матрицата)
Вече имаме матрицата със входните данни, наподобяващ двоично представяне на числата.
Сега обхождам матрицата matrix ,но по редове,за да видя колко единици има вертикално(в една колона),за да знам колко битчета ще паднат на дъното.  И веднага след това в друг for цикъл пълня другата (изходна, 
output[row,col] ) матрица с нужният брой еденички ,за всеки нейн стълб от дадена колона .
Накрая обхождам всеки ред от матрицата output[ , ]  и смятам числото , което е сумата от степените на двойката ,а степента е номерът на колоната,но само там където има записана еденичка от предния процес.
Числата от всеки ред записвам отново в масивът input  и накрая го принтирам на конзолата с един for цикъл.
Ами това е. Дано  да съм бил ясен,а ако не съм погледнете кога,не е толкова сложно ,колкото звучи.


от Veni.Naydenov (200 точки)