17.11.16 - Алгоритмы

Обход массива 

В большинстве следующих задача необходимо “пройтись” по массиву попутно “что-то” делая (e.g сохранять сумму элементов, сохранять индекс и кучу всего ).

for (int i = 0; i < arr.Length; ++i)
{
  // Внутри этого цикла i - индекс элемента массива; a[i] - то, что лежит в этом индексе, тоесть сам элемент.
}

// В обратную сторону
for (int i = 0; i < arr.Length; ++i)
{ }

  • Задача - Вычислить скалярное произведение двух векторов размером 4. (Скалярным произведением называется сумма попарных произведений соответствующих элементов массивов.) = 1
  • Подсчитать количество отрицательных элементов заданного одномерного массива размером 6. = 1
  • Вычислить длину вектора размером 5. Длина вектора вычисляется по формуле
  • L=x12+x22+...+xn2L = \sqrt{x^2_{1} + x^2_{2} + ... + x^2_{n}} = 1


Перестановка элементов в массиве

Random rnd = new Random();
int arr = new int[5];
for (int i = 0; i < arr.Length; ++i)
  arr[i] = rnd.Next(-10, 10);

int lhsIndex = 2; // Left hand side index
int rhsIndex = 4; // Right hand side index

int tmp = arr[rhsIndex];
arr[rhsIndex] = arr[lhsIndex];
arr[lhsIndex] = tmp;

Последний отрицательный элемент массива поменять с первым элементом массива

Random rnd = new Random();
int arr = new int[5];
for (int i = 0; i < arr.Length; ++i)
  arr[i] = rnd.Next(-10, 10);
  
/*
Обратите внимание на формулировку задачи. Ключевые слова - поменять / последний отрицательный / первый.
*/

// Та же самая поцедура
int lhsIndex = 0; // ? первый элемент. Индекс первого элемента 0.
int rhsIndex = 0; // ? последний отрицательный

// Необходимо найти индекс последнего отрицательного и положить в rhsIndex 

for (int i = 0; i < arr.Lenght; ++i)