Глава 3. Алгоритмы, использующие одномерные массивы - 3.4. Нахождение элементов, обладающих определенным свойством

E-mail Печать PDF
Рейтинг пользователей: / 10
ХудшийЛучший 
Индекс материала
Глава 3. Алгоритмы, использующие одномерные массивы
3.2 Задачи заполнения массива
3.3. Задачи анализа массива
3.4. Нахождение элементов, обладающих определенным свойством
3.5. Изменение значений некоторых элементов
3.6. Обмен значений элементов
3.7. Удаление и вставка элементов массива
3.8. Алгоритмы, реализуемые с помощью циклов с предусловием
3.9. Использование вложенных циклов
Все страницы

3.4. Нахождение элементов, обладающих
 определенным свойством

Пример 3.5. Дан массив произвольной длины. Найти наибольший элемент массива и определить его номер.

Дано: n - размер массива; массив А = (a1, a2, ... , an).

Найти Amax - наибольший элемент массива; k - его номер.

Математическая модель:

Пусть Amax = a[0]; k = 0;

Если Amax < a[i], то Amax = a[i], k = i,  для i = 1, 2, 3, ..., n - 1.

i

Amax< A[i]

Amax

k

 

 

3

1

2

-1 < 3? Да

 

 

3

10 < 3? Нет

10

3

4

1 < 10? Да

 

 

5

6 < 10? Да

 

 

 

 

 

 

 

Тест

Данные

Результат

N = 4

A = (3, -1, 10, 1, 6)

Amax = 10

k = 3

       

Пример 3.6. Задан числовой массив A[n]. Найти длину самой длинной последовательности идущих подряд элементов массива, равных нулю.

Этот алгоритм использует алгоритм нахождения наибольшего числа среди группы чисел, который мы только что рассмотрели.

Обозначим: A[n] - массив вещественных чисел, где n - размер массива. Max - длина наиболее длинной последовательности подряд идущих нулей; len - длина последовательности из подряд идущих нулей.

Фрагмент алгоритма

Комментарии

len = 0 max = 0

нц

Для i от 0 до n повторять

Если a[i] <> 0 то

         Если max < len то

               max = len

              len = 0

     Все если

иначе len = len + 1

Все если

кц

Если (max < len) max=len
Все если

 

Присваивание начальных значений

В цикле выполняем следующие действия:

1) Если очередной член последовательности не равен нулю, то вычисляем наибольшее значение из длин последовательности идущих подряд нулевых элементов.

2) После окончания работы оператора «если» обнуляем значение len, для определения длины новой последовательности.

3) Определяем длину последовательности из нулей.

По окончании цикла сравниваем длину последней последовательности с наибольшим значением.

Тест

Данные

Результат

N = 10

A = (3, 0, 0, 2, 3, 0, 0, 0, 6, 0)

max = 3

     

Результаты работы алгоритма.

i

A[i]

A[i] <> 0?

len < max?

len

max

 

 

 

 

0

0

1

3

3 <> 0? Да

0 < 0? Нет

 

 

2

0

0 <> 0? Нет

 

0 + 1 = 1

 

3

0

0 <> 0? Нет

 

1 + 1 = 2

 

4

2

2 <> 0? Да

0 < 2? Да

0

2

5

3

3 <>0? Да

2 < 0? Нет

 

 

6

0

0 <> 0? Нет

 

0 + 1 = 1

 

7

0

0 <> 0? Нет

 

1 + 1 = 2

 

8

0

0 <> 0? Нет

 

2 + 1 = 3

 

9

6

6 <> 0? Да

2 < 3? Да

0

3

10

0

0 <> 0? Нет

 

0 + 1 = 1

 

 

 

 

3 < 1? Нет

 

 

Итак, в результате работы алгоритма длина самой длинной последовательности подряд идущих нулевых элементов массива, равна 3.

Пример 3.7. Найти и напечатать номера четных элементов массива.

Дано: n - размер массива, массив А = (a1, a2, ... , an).

Найти  номера четных элементов массива.

Словесное описание алгоритма:

Необходимо просмотреть весь массив, и если просматриваемый элемент является четным, вывести его номер.

Приведем фрагмент, реализующий этот алгоритм.

нц

Для i  от 1 до n повторять

Если (a [i] Mod 2 = 0) То Вывод i;

Тест

Данные

Результат

N= 11

A = (3, 0, -4, 2, 3, 20, -5, 15, 6, 5, -1)

3, 4, 6, 9

     

Задачи для самостоятельного решения

1. Найдите сумму положительных элементов массива и их количество.

2. Определите, сколько элементов массива P размером n удовлетворяет условию Pi T, где Т - произвольное число.

3. Определите среднее арифметическое элементов массива.

4. Дана последовательность {ai} размером n, где ai = sin2(3+ 5). Определите, сколько членов последовательности с четными номерами имеют значение, меньше чем 0, 25.

5. Даны натуральное число n, действительные числа х1,..., xn. Получите y = (1 + r)/(1 + s), где r - сумма всех тех членов последовательности, которые не превосходят 1, а s - сумма членов, больших 1.

6. Дано натуральное число n, действительные числа y1,...,yn. Найдите

max (|z1|,...,|zn|), где zi =

7. У прилавка магазина выстроилась очередь из n покупателей. Время обслуживания продавцом i-го покупателя ti (i = 1,..., n). Пусть даны натуральное число n и действительные числа t1,..., tn. Получите c1,...,.cn, где ci - время пребывания i-го покупателя в очереди. Укажите номер покупателя, для обслуживания которого продавцу понадобится наименьшее время.

8. Выясните, какое число в последовательности {аi} встречается раньше, положительное или отрицательное.

9. Даны натуральное число n, действительные числа a1,...,an. В последовательности  определите число соседств: а) двух положительных чисел; b) двух чисел одного знака, причем модуль первого числа должен быть больше модуля второго числа.



 

Добавьтe Ваш комментарий

Ваше имя (псевдоним):
Ваш адрес почты:
Заголовок:
Комментарий:

Комментарии

Интересное




Похожие материалы

Партнёры