Алгоритм поиска максимального элемента неупорядоченного массива заключается в следующем:
- сначала мы предполагаем, что наибольший элемент находиться в начале массива;
- сохраняем значение первого элемента в переменной;
- затем мы сравниваем его с другими элементами массива один за другим, если какой-либо элемент больше, чем наш предполагаемый максимум, то обновляется значение переменной;
- после обхода всего массива, возвращаем максимальный элемент.
Код программы для поиска максимального элемента массива
program Maximal; const arrayLength = 10; var inputArray : array [1..arrayLength] of integer; maximum, i: integer; begin randomize; writeln (‘Исходный массив: ‘); for i := 1 to arrayLength do begin inputArray[i] := random(100); write (inputArray[i]:4); end; writeln; maximum := inputArray[1]; for i := 2 to arrayLength do if maximum < inputArray[i] then maximum := inputArray[i]; write(‘Максимальный элемент массива ‘, maximum); readln; end.
Рекурсивный алгоритм нахождения максимального значения элемента массива
Найти максимальный элемент массива, можно также — рекурсивно. Реализация метода немного сложнее предыдущего, однако полезна для изучения принципов рекурсивных вызовов функций.
Как найти минимум и максимум массива | Фрагмент лекции JavaRush — университета
program Maximum; const arrayLen = 10; var inputArr : array [1..arrayLen] of integer; max, i: integer; function MaxElement(maximal, index: integer):integer; begin if index > arrayLen then MaxElement := maximal else begin if inputArr[index] > maximal then maximal := inputArr[index]; MaxElement := MaxElement(maximal, index + 1); end; end; begin randomize; writeln (‘Исходный массив: ‘); for i := 1 to arrayLen do begin inputArr[i] := random(100); write (inputArr[i]:4); end; writeln; max := inputArr[1]; max := MaxElement(max, 2); write(‘Наибольший элемент ‘, max); readln; end.
Источник: programm.top
Поиск максимального элемента в массиве
Ввести целочисленный массив из N элементов с клавиатуры. Найти максимальный элемент этого массива.
Исходный код на языке C++
/* * Ввести целочисленный массив из N целых чисел. * Найти максимальный элемент массива */ #include using namespace std; int main() < int *arr; // указатель для выделения памяти под массив int size; // размер массива // Ввод количества элементов массива cout > size; if (size arr = new int[size]; // выделение памяти под массив // заполнение массива for (int i = 0; i < size; i++) < cout > arr[i]; > // Нахождение максимального элемента int max = arr[0]; for (int i = 1; i < size; i++) < if (arr[i] >max) < max = arr[i]; >> // Вывод результата на экран cout
Источник: code-live.ru
Поиск минимального и максимального значения в массиве
Объясните на пальцах, почему именно так? Ведь по сути получилось, что: Максимумом и минимумом одновременно, назначен нулевой (первый) элемент массива. Дальше он по циклу сравнивает, нулевой элемент массива, с каждым следующим, и постепенно если нулевой больше или меньше следующего назначает минимумы и максимумы. Таким образом например массив A из [N] элементов, где N=5.И массив имеет следующие значения <10,5,7,8,11>; Я вижу что цикл по идее будет работать так:
УРОК 9 -10. Максимальный и минимальный элемент массива (10 класс)
шаг 1. If (10 < 5) Max = A[0] if (10 >5) Min = A[1] шаг 2. if (10 < 7) Max = A[0] if (10 >7) Min = A[2] — уже ошибка т.к. 5 < 7 шаг 3. if (10 < 8) Max = A[0] if (10 >8) Min = A[3] шаг 4. if (10 < 11) Max = A[4] if (10 >11) Min = A[3]
Или программа работает не так? точнее она и работает не так, не понимаю логику, объясните пожалуйста.
Отслеживать
67.8k 210 210 золотых знаков 76 76 серебряных знаков 218 218 бронзовых знаков
задан 14 июн 2019 в 10:29
alex fedorov alex fedorov
11 1 1 бронзовый знак
он по циклу сравнивает, нулевой элемент массива, с каждым следующим, — Разве в коде сказано if (A[0] < A[i]) ? Нет. Не нулевой, а текущие минимум и максимум, которые изменяются в ходе работы цикла.
14 июн 2019 в 10:34
спасибо огромное. Не знаю как Вас отблагодарить и поставить плюсик. Закройте тему. Теперь понял.
14 июн 2019 в 10:38
Ну, там уже два ответа написали, выберите, какой вам кажется наиболее подходящим, и поставьте галочку. 🙂 Или напишите еще один ответ сами, это тоже будет полезно. 🙂
14 июн 2019 в 10:41
Так самое понятное объяснение у Вас: что указаны текущие минимумы и максимумы в теле If-а, которые назначаются в ходе работы цикла. А те два ответа, они такие же замудренные как объяснения моего преподавателя.
14 июн 2019 в 10:54
Ну, мне, честно говоря, лень переделывать комментарий в полноценный ответ. 🙂 Напишите ответ сами, так чтобы было понятно и Вам, и тем, кто потом столкнется с такой же проблемой. 🙂
14 июн 2019 в 11:00
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Если пройтись по приведенным в вопросе итерациям:
// итерация 0 if (10 < 5) Max = A[0] if (10 >5) Min = A[1] // итерация 1 if (10 < 7) Max = A[0] if (10 >7) // здесь ошибка в условии Min = A[1]
Там, где ошибка, будет не 10, а уже 5, т.к. значение Min изменилось на предыдущей итерации ( Min = a[1] ).
Отслеживать
ответ дан 14 июн 2019 в 10:36
2,464 2 2 золотых знака 13 13 серебряных знаков 26 26 бронзовых знаков
Ну давайте я побуду отладчиком
шаг 1. If (10 < 5) Max = 5 //не выполнится if (10 >5) Min = 5 //выполнится шаг 2. if (10 < 7) Max = 7 //не выполнится if (5 >7) Min = A[2] — уже ошибка т.к. 5 < 7 //неправда, вы ошиблись Min = 7 //не выполнится шаг 3. if (10 < 8) Max = 8 // не выполнится if (5 >8) Min = 8 // не выполнится шаг 4. if (10 < 11) Max = 11 //выполнится if (5 >11) Min = 11 //не выполнится Max — 11, Min — 5
Отслеживать
ответ дан 14 июн 2019 в 10:37
1,192 7 7 серебряных знаков 11 11 бронзовых знаков
Код, который вы представили на самом деле пример использования динамического программирования.
Пусть вас не пугает слово «динамическое программирование», в данном случае алгоритм очень прост и мы рассмотрим его подробно применительно к нашей задаче. Сформулируем алгоритм. Для простоты я буду его описывать для случая поиска максимума, для минимума всё аналогично.
Итак, у нас есть массив A , с индексами от 0 до N — 1 , заведём переменную M . Теперь будем обновлять переменную M так, чтобы после 0-й итерации цикла в M лежал бы максимум массива A[0] , после 1-й лежал бы максимум массива A[0], A[1] , после 2-й максимум в A[0], A[1], A[2] и так далее, после k-й итерации в M будет лежать максимум первых k + 1 элементов массива, то есть максимум его начала A[0], A[1], . , A[k] .
Легко видеть, что если мы организуем такую процедуру, то после N — 1 итераций цикла мы в переменной M получим максимум в A[0], A[1], . , A[N — 1] , то есть в точности максимум во всём массиве.
Осталось только разобраться, как организовать такой цикл. Вначале надо взять M = A[0] , при первом шаге максимум массива из одного элемента это он сам и есть.
Как теперь сделать шаг? Если у нас есть максимум среди A[0], A[1], . , A[k] , и он равен M , то максимум среди A[0], A[1], . , A[k], A[k + 1] это либо M , либо вновь добавленный элемент A[k + 1] , в зависимости от того, превысил ли добавленный элемент уже имеющийся максимум.
Отсюда становится ясно, что новый максимум равен наибольшему из ранее найденного (то есть M ) и вновь добавленного элемента (то есть A[k + 1] ), это значит, что максимум M следует обновить таким образом: M := max(M, A[k + 1]) . Ровно это и происходит внутри цикла при обновлении переменной Max :
if (Max < A[i]) Max = A[i];
Алгоритмы, когда мы последовательно увеличиваем область охвата данных, обновляя на каждом шагу некую характеристику, используя её значение, подсчитанное на предыдущем шаге, известны под общим названием Динамическое программирование. В данном случае это один из простейших алгоритмов этого типа.
Источник: ru.stackoverflow.com