Практически изпит на 29ти декември. Впечатления и решения.

index

След дълга борба още един изпит е в историята и като по някакво чудо аз успях да мина с 500/500. В следващите няколко реда ще се опитам да представя моите решения и логиката ми която стои зад тях.  Предупреждение – качвам същия код който съм писал на изпита и той е леко казано мазало, така че имайте едно на ум 🙂

Условията, тестовете в БГКодер и авторските решения може да свалите от тук:


Задача 1 – Triple Rotation of Digits

Основната ми идея тук е: Напълвам всяко число от входния string в List<> ( което сега като се замисля е напълно ненужно т.к. мога да работя с индексите на string ) и после присвоявам последните 3 числа в начална позиция на един StringBuilder и прикрепям останалите числа от stringa на последни позиции в StringBuilder – a. Също много важно е да се отбележи че прикрепвам всяко от първите 3 числа, само ако не е ‘0’ . И с това се справяме за всички числа с 3 или повече цифри. За двуцифрените просто разменяме 1-вата и 2-рата цифра и ги изписваме. Тук също е важно да се провери дали първата, цифра е 0-ла и ако е – не се изписва ( докато стигна до този извод ми трябваше 1 час 😀 ) . И на последно място, ако числото е само с 1-на цифра изписване само нея. Колко цифри има числото може да проверим спрямо входния string -> string.Length или спрямо List<> с List.Count.

Ето и моето решение: – Цък

Задача 2 – Quadronacci Rectangle

Относително лесна задача, ако се сетите, че може да вземете част от кода от задачата за Трибоначи от предишни години. После резултатите натрупвате в лист или масив ( лично избрах лист ) и ги спринтирате на конзолата, като винаги, когато брояча на принтиращия цикъл се дели без остатък на броя на колоните слагате нов ред.

Ето решението: – Цък

Задача 3 – Poker

Идея ми тук бе следната: Подадените карти си ги пълня в едни лист, и ако ми се падната – J,Q,K,A на тяхно място присвоявам -11,12,13,14 ( по лесно е да се търси зависимост м/у цели числа 🙂  ). После с един цикъл търся колко повторения има дадена карта – 2,3,4 или 5 , а с друг търся дали има straight ( тук е хубаво да се отбележи, че трябва да се обхване и специалния случай, когато имаме – А, 2, 3, 4, 5 ) и след това с едно кило If условни оператори изкарваме желания резултат.

Моето решение: – Цък

Задача 4 – UK flag

Доста елементарна задача на фона на другите. Лично походих, чрез разделянето на картинката на 3 част – горна, средна и долна и съответно принтирането им, чрез new string().

Ето и моя код: – Цък

Задача 5 – Angry Bits

Най-трудната от всички задачи. Лични походих към нея така: преобразувам подадените 8 числа в двойчна бройна система и ги подреждам в двумерен масив с размери 16 колони и 8 реда. След това почвам да обхождам, частта на масива в която се съдържат гаргите ( от 8 до 15 колона ) по колони ( това е много важно т.к. ако се обхожда по редове резултата е грешен! ) от дясно на ляво. Когато среща птица започвам да я местя с един безкраен цикъл, като преди това си записвам позицията на която е била птицата за да мога после да се върна на нея и да продължа търсенето на птици. Местенето го реализирам, чрез две променливи който непрекъснато добавям към координатите и ако срещна горен ред променям дадената променлива за местене по редовен. Когато срещна прасе проверявам дали на полетата около него има други прасета и ако има ги прибавям към броя на убитите прасета ( създал съм такава пролива ). Тук трябва да отбележим, че проверката може да се осъществи само ако прасето е в интервала от първия до шестия ред на матрицата и на различна от нулевата колона. Също така трябва да съобразим, че ако прасето е на 7мата колона не трябва да проверяваме дали в ляво от него има прасета т.к. там може да има птици и това да наруши верността на резултата ни. И на последно място съхраняваме колко е дълга полета на една птици за целите на изчисляваме на резултата. Когато свършим с изчисляването на резултата, проверяваме дясната страна за останали прасета и ако има това означава, че сме загубили.
Накрая извеждаме на конзолата резултата последван от това да ли сме спечелили или не ( “Yes”, “No” )

Ето и крайния резултат: – Цък

Като заключение бих казал, че изпита бе трудничък, но не и нерешим. Просто трябваше да четем условията си внимателно и да мислим трезво и спокойно 🙂

Примерен тест, за C# част 1, Продължение

quizindex

След големия интерес, проявен към първия ми примерен тест, създадох и втори.
Тук нещата стоят малко по-различно – формата е 65 върпоса за 2 часа, като трудността е малко повишена.

Ето и линк за сваляне на самия тест:



Ако не искате да сваляте теста може да го отворите от тук: http://simpletests.bugs3.com/

Примерен тест, за C# част 1

C_Sharp

След като бях обхванат от музата наскоро реших да сътоворя едно примерно тестче за изпита за C# част 1.
Формата е аналогичен на този, който ще бъде на реалния изпит – 25 въпроса за 50 минути.
Материала включен в теста е изцяло от презентациите, така че не би трябвало да имате проблем с решаването му.
Ето линк за свалянето му:



Ако не искате да сваляте теста може да го отворите от тук: http://simpletests.bugs3.com/

Ако намерите грешки, неточности и т.н. оставете един кометар и ще се постарая да ги поправя.

Задачите от Примерния изпит по C# от 2011/2012


Тук ще поместя линкове към условията и моите решения на задачите от C# Fundamentals 2011/2012 Part 1 – Sample Exam . Не претендирам, че решенията ми са най-оптимални, те дават 100/100 в системата BGCoder.

Условията на задачите може да намерите тук:
BGCoder или в Студетската Система на Телерик

Ето и решенията:
Task 1 – Cartesian Coordinate System: Цък
Task 2 – Miss Cat 2011: Цък
Task 3 – Forest Road: Цък
Task 4 – Binary Digits Count: Цък
Task 5 – Subset Sums: Цък

Забележки:
1. В 2 и 5-та задача съм използвал масиви за улеснение. Задачата е напълно възможно да се реше и без тях просто няма да е толкова компактно.
2. Макар, че в задача 3та съм използвал цикли за рисуване по конзолата, по-ефективен начин е: new string () . Ако не знаете как работи ви препоръчвам с 2 ръце, да разберете. Помага много !

Решения на задачите за домашна от лекцията за Цикли

Ето решенията ми на задачите от оследната лекция от Част 1 за програмиране на C# – Цикли.

Условията:
1. Write a program that prints all the numbers from 1 to N.
2. Write a program that prints all the numbers from 1 to N, that are not divisible by 3 and 7 at the same time.
3. Write a program that reads from the console a sequence of N integer numbers and returns the minimal and maximal of them.
4. Write a program that calculates N!/K! for given N and K (1<N<K).
5. Write a program that calculates N!*K! / (K-N)! for given N and K (1<N<K).
6. Write a program that, for a given two integer numbers N and X, calculates the sum S = 1 + 1!/X + 2!/X2 + … + N!/XN
7. Write a program that reads a number N and calculates the sum of the first N members of the sequence of Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, …
Each member of the Fibonacci sequence (except the first two) is a sum of the previous two members.
8. Write a program that calculates the greatest common divisor (GCD) of given two numbers. Use the Euclidean algorithm (find it in Internet).
9. In the combinatorial mathematics, the Catalan numbers are calculated by the following formula:

Write a program to calculate the Nth Catalan number by given N.
10. Write a program that prints all possible cards from a standard deck of 52 cards (without jokers). The cards should be printed with their English names. Use nested for loops and switch-case.
11. Write a program that reads from the console a positive integer number N (N < 20) and outputs a matrix like the following:
N = 3 | N = 4
1 2 3 | 1 2 3 4
2 3 4 | 2 3 4 5
3 4 5 | 3 4 5 6
| 4 5 6 7
12. * Write a program1 that calculates for given N how many trailing zeros present at the end of the number N!. Examples:
N = 10  N! = 3628800  2
N = 20  N! = 2432902008176640000  4
Does your program work for N = 50 000?
Hint: The trailing zeros in N! are equal to the number of its prime divisors of value 5. Think why!
13. * Write a program that reads a positive integer number N (N < 20) from console and outputs in the console the numbers 1 … N numbers arranged as a spiral.
Example for N = 4
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

Ето линк към решенията:


П.С. Задачите с факториел стават доста лесни ако изнесете логиката в метод 🙂

Решения на задачите от лекцията – Условни конструкции

Решенията ми на задачите от тази лекция.
Ето условията:
1. Write an if statement that examines two integer variables and exchanges their values if the first one is greater than the second one.
2. Write a program that shows the sign (+ or -) of the product of three real numbers without calculating it. Use a sequence of if statements.
3. Write a program that finds the biggest of three integers using nested if statements.
4. Sort 3 real values in descending order using nested if statements.
5. Write program that asks for a digit and depending on the input shows the name of that digit (in English) using a switch statement.
6. Write a program that enters the coefficients a, b and c of a quadratic equation
a*x2 + b*x + c = 0
and calculates and prints its real roots. Note that quadratic equations may have 0, 1 or 2 real roots.
7. Write a program that finds the greatest of given 5 variables.
8. Write a program that, depending on the user’s choice inputs int, double or string variable. If the variable is integer or double, increases it with 1. If the variable is string, appends “*” at its end. The program must show the value of that variable as a console output. Use switch statement.
9. We are given 5 integer numbers. Write a program that checks if the sum of some subset of them is 0. Example: 3, -2, 1, 1, 8  1+1-2=0.
10. Write a program that applies bonus scores to given scores in the range [1..9]. The program reads a digit as an input. If the digit is between 1 and 3, the program multiplies it by 10; if it is between 4 and 6, multiplies it by 100; if it is between 7 and 9, multiplies it by 1000. If it is zero or if the value is not a digit, the program must report an error.
Use a switch statement and at the end print the calculated new value in the console.
11. * Write a program that converts a number in the range [0…999] to a text corresponding to its English pronunciation. Examples:
0  “Zero”
273  “Two hundred seventy three”
400  “Four hundred”
501  “Five hundred and one”
711  “Seven hundred and eleven”

Ето и линк към решенията:


П.С. Последната задача ( 11-та ) е доста интересна, не толкова сложна колкото, доста обемна за писане. Лично успях да я съкратя с досата с масиви, но е напълно възможно да се нарпави и с условни конструкции + switch.