Обяснение на задачите/упражненията от домашното за Масиви в Академията. Бая като брайка задачи са, затова ги разделям на две части. За някой задачи не ми остана време да напиша обяснения, при първа възможност ще ги добавя, а други ще ги ъпдейтна.
{ Кодът с решенията към всяка една от задачите можете да видите тук }
1. Write a program that allocates array of 20 integers and initializes each element by its index multiplied by 5. Print the obtained array on the console.
ОБЯСНЕНИЕ: Инициализираме масив от 20 елемента. С for цикъл обхождаме елементите му всеки един от които го умножаваме по 5. След това с втория for цикъл принтираме резултата на конзолата.
2. Write a program that reads two arrays from the console and compares them element by element.
ОБЯСНЕНИЕ: Първото нещо, което правим е да инициализираме самия размер на двата масива. Макар и незадължително по условие, с помощта на if условието проверяваме дали броя на елементите в двата масива са равни. Това може и да не го правим, ако просто накараме потребителя веднъж да въведе число за размера на масивите (веднъж като го въведе ще го ползваме същата променлива при инициализацията и на втория масив). След това с помощта на for цикли въвеждаме самите стойности из отделните позиции на двата масива.
Преминаваме към същинската част на задачата – сравняване на самите отделни стойности в масива една по една. Използваме булева променлива, в която изначално казваме че елементите в двата масива са равни, до доказване на противното. С помощта на for цикъл започваме да сравняваме отделните елементи на масивите един по един. В случай че два елемента от една и съща позиция в масивите се случи да не са равни се изпълнява if условието, променливата, която създадохме по-горе вече става false и се прехвърляме към break оператора, тъй като при това положение няма смисъл да продължаваме да сравняваме останалите елементи из масивите. Отпечатваме резултата на конзолата.
3. Write a program that compares two char arrays lexicographically (letter by letter).
ОБЯСНЕНИЕ: Решението е почти същото като на задача 2 от Масиви. Разликата е че зададох char-овете предварително в самия масив.
4. Write a program that finds the maximal sequence of equal elements in an array.
ОБЯСНЕНИЕ: Заделяме масив и го инициализираме. Създаваме три нови променливи: counter, longestSequence и value. В първата ще записваме текущото проверявано повторение от числа, във втората ще записваме най-голямото повторение от числа и в последната (value) ще запишем елемента, който създава най-дългата поредица. С for цикъла сравняваме числата позиция по позиция. Ако намерим две еднакви се изпълнява if условието, в което са събрани трите променливи. Накрая яко longestSequence е различно от 0 т.е. ако сме открили някаква повтаряща се поредица, изписваме колко е голяма тя на конзолата.
5. Write a program that finds the maximal increasing sequence in an array. Example: {3, 2, 3, 4, 2, 2, 4} –> {2, 3, 4}.
ОБЯСНЕНИЕ: Създаваме си масив от някакви числа, които въвеждаме ръчно от конзолата. Създаваме си първоначално 4 променливи.
В maxSequence ще отброяваме броя на нарастващите последователности, ако може така да се каже. Примерно ако имаме поредица от числата 1,2,5,1 в тази променлива ще се запише 3.
В sequence променливата ще записваме броя на моментните повторения, които цикълът е открил.
В sequenceNumbers ще се записват самите числа, които в момента цикъла проверява.
В maxSequenceNumbers ще се съдържа максималната, най-голямата последователност от нарастващи числа, която е открита до момента.
Пускаме един нормален for цикъл, с който да сравняваме числата в поредицата, като в зависимост от това дали числото е по-малко или по-голямо от следващото сравнявано в редицата се изпълнява едно от if условията. Когато програмата премине през скобите със самите if условия, „зачистваме“ sequence и sequenceNumbers променливите, съответно с числото 1 и „“. След което останалато е лесно – програмата се връща отново горе във for цикъла, минава и сравнява останалите числа по редицата и накрая програмата принтира резултата
6. Write a program that reads two integer numbers N and K and an array of N elements from the console. Find in the array those K elements that have maximal sum.
ОБЯСНЕНИЕ: Решението е подобно като на задача 5. Особеното е че с if условие се прави проверка i + k > arrayLen, дали случайно не сме излезнали от рамките на масива. След това за всяка „заградена“ съвкупност от i+k индекси до края на масива правим сравнения на самите суми и намираме, коя е най-голямата.
7. Sorting an array means to arrange its elements in increasing order. Write a program to sort an array. Use the „selection sort“ algorithm: Find the smallest element, move it at the first position, find the smallest from the rest, move it at the second position, etc.
ОБЯСНЕНИЕ: Основна задача за сортиране на масив, може би една от задачите за масиви (и в частност тяхното сортиране) с най-много обяснения в интернет – http://en.wikipedia.org/wiki/Selection_sort
8. Write a program that finds the sequence of maximal sum in given array.
Example: {2, 3, -6, -1, 2, -1, 6, 4, -8, 8} –> {2, -1, 6, 4}
Can you do it with only one loop (with single scan through the elements of the array)?
ОБЯСНЕНИЕ: За решението на тази задача трябва да се използва алгоритъма на Кадан (повече информация за него, както и имплементацията му на кода за C# – тук). Стъпките накратко са следните: инициализираме си масив; създаваме си 5-те основни променливи, които ще използваме в алгоритъма на Кадан; след като алгоритъмът се извърти принтираме резултата на конзолата.
9. Write a program that finds the most frequent number in an array. Example: {4, 1, 1, 4, 2, 3, 4, 4, 1, 2, 4, 9, 3} –> 4 (5 times)
ОБЯСНЕНИЕ: С първите два for цикъла първо подреждаме самия масив от числа във възходящ ред. Стандартен алгоритъм за сортиране си е това, нищо сложно. След което правим класическите три променливи, в които да отброяваме: броя на повторенията към момента, най-голямото повторение и самото число, което е с най-голямото повторение. Пускаме трети for цикъл, с който започваме да сравняваме един по един елементите из масива и съответно ако има еднакви числа в поредица едно до друго if и else конструкцията в кода се грижат за това накрая конзолата да ни изпечата правилното решение на задачата.
10. Write a program that finds in given array of integers a sequence of given sum S (if present). Example: {4, 3, 1, 4, 2, 5, 8}, S=11 –> {4, 2, 5}
ОБЯСНЕНИЕ: Тук търсим в масив последователна поредица от числа, чиято сума да е равна на числото S. Правим си три променливи по подобие на 8-ма задача: startIndex, endIndex, CurrSum.
С два for цикъла обхождаме масива събирайки отляво-надясно елементите му. В момента, в който открием елементи, чиято сума да удовлетворява if условието (а именно – временната CurrSum да бъде равна на sumS) влизаме в третия for цикъл, който ни отпечатва индексите (startIndex e нейното начало, а endIndex нейния край) на търсената поредица от числа. Ако не намерим такава поредица от елементи – изписваме, че в масива няма такава поредица.
11. Write a program that finds the index of given element in a sorted array of integers by using the binary search algorithm (find it in Wikipedia).
ОБЯСНЕНИЕ: Задача имаща за цел да ни запознае с един от основните алгоритми в програмирането – Binary Search.
Кодът към всяка една от задачите можете да видите тук.
Очаквайте скоро втора част с обясненията и на останалата част от задачите за Масивите…