Как найти номер наибольшего элемента массива

Перейти к содержанию

Найти наибольший элемент и его порядковый номер в массиве

Просмотров 17.9к. Обновлено 15 октября 2021

Заполнить одномерный массив случайными числами. Найти и вывести на экран наибольший его элемент и порядковый номер этого элемента.

Заполнение массива и поиск наибольшего элемента можно выполнять в одном цикле.

Поскольку необходимо найти не только максимальный элемент, но и его индекс, то лучше искать индекс, так как по нему всегда можно получить значение из массива. Конечно, при поиске можно сохранять и индекс, и элемент в двух разных переменных. Однако этого делать не обязательно. До цикла присвоим переменной, в которой будет храниться индекс максимального элемента, значение 1. Это значит, предполагается, что максимальный элемент находится в первой ячейке массива.

Тело цикла будет состоять из следующих действий:

  1. Сгенерировать случайное число и записать его в очередную ячейку массива.
  2. Вывести полученное число на экран.
  3. Если это число больше, чем то, что хранится под индексом, записанным в переменную-максимум, то присвоить этой переменной текущий индекс (не само число!).

После того, как индекс наибольшего элемента будет найден, вывести его на экран. Чтобы вывести элемент по данному индексу, надо использовать выражение извлечения элемента из массива. Например, если max — это индекс, а arr — массив, то выражение будет таким: arr[max].

Pascal

найти максимальный элемент массива паскаль


const N = 10;
var
arr: array[1..N] of integer;
i, max: byte;
begin
randomize;
max := 1;
for i:=1 to N do begin
arr[i] := random(100);
write(arr[i], ' ');
if arr[max] < arr[i] then
max := i;
end;
writeln;
writeln('arr[',max,'] = ',arr[max]);
end.



64 26 99 37 57 64 6 21 48 19
arr[3] = 99

Язык Си


#include < stdio.h>
#define N 10
main() {
int arr[N], i, mx;
srand(time(NULL));
mx = 0;
for (i=0; i< N; i++) {
arr[i] = rand() % 100;
printf("%d ", arr[i]);
if (arr[i] > arr[mx])
mx = i;
}
printf("narr[%d] = %dn", mx, arr[mx]);
}



75 46 7 39 11 29 34 77 86 25
arr[8] = 86

Python

найти максимальный элемент массива python


from random import random
N = 10
arr = [0] * N
mx = 0
for i in range(N):
arr[i] = random() * 100
print("%.2f" % arr[i], end='; ')
if arr[i] > arr[mx]:
mx = i
print("narr[%d] = %.2f" % (mx, arr[mx]))



73.83; 16.23; 30.18; 27.41; 94.27; 46.27; 66.17; 61.07; 18.89; 61.16;
arr[4] = 94.27

КуМир


алг
нач
цел N = 10
целтаб arr[1:N]
цел mx, i
mx := 1
нц для i от 1 до N
arr[i] := irnd(100)
вывод arr[i], " "
если arr[mx] < arr[i] то
mx := i
все
кц
вывод нс,"arr[",mx,"] = ",arr[mx]
кон



57 78 14 96 76 9 19 36 45 54
arr[4] = 96

Basic-256


decimal 1
N = 10
dim arr(N)
mx = 0
for i=0 to N-1
arr[i] = rand * 100
print arr[i] + "; ";
if arr[i] > arr[mx] then mx = i
next i
print
print "Номер элемента: " + mx
print "Значение элемента: " + arr[mx]



21.9; 58.4; 24.4; 72.6; 88.5; 65.2; 56.6; 65.1; 72.6; 40.4;
Номер элемента: 4
Значение элемента: 88.5

Самый простой способ

Разумеется, проще всего получить минимальный и максимальный элементы массива с помощью функций min() и max():

$arr = [8, 4, 12, 9];
$max = max($arr); // 12
$min = min($arr); // 4

Однако на форумах часто просят написать скрипт, не использующий эти функции. Чаще всего этого требуют преподаватели учебных учреждений.

Условия задачи

1. Найти наибольший наименьший элементы в одномерном числовом массиве.
2. Определить номер минимального и максимального элементов заданного одномерного массива.
3. Найти минимальное и максимальное значение в ассоциативном массиве.

Общий принцип поиска элементов

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

Согласно условию, нам необходимо объявить числовой массив произвольной длины. Также объявим 4 переменные, в которые будем помещать найденные значения и их ключи:

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;

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

И если больше — будем записывать в $max новое максимальное значение, а в $max_key его ключ. Абсолютно также поступим и с минимальными ключом и значением.

Пример с циклом foreach:

foreach($arr as $k => $v)
{
	if($v > $max)
	{
		$max = $v;
		$max_key = $k;
	}

	if($v < $min)
	{
		$min = $v;
		$min_key = $k;
	}
}

На данном этапе наш код уже будет работать, но это ещё не всё. Попробуем изменить исходный массив и посмотрим на результат:

<?php
$arr = [0, -12];
$max = null;

foreach($arr as $v)
{
	if($v > $max)
		$max = $v;
}

var_dump($max); // -12

Максимальным должно быть число 0, но скрипт вывел -12. Дело в том, что PHP не считает истинным выражение 0 > null, поэтому ноль на первой итерации цикла не записался в переменную $max.

Для решения этой проблемы просто добавим условие, что если $max === null, т.е. если это первая итерация, то в любом случае записываем текущее значение в $min и $max:

<?php
$arr = [0, -12];
$max = null;

foreach($arr as $v)
{
    if($v > $max or $max === null)
        $max = $v;
}

var_dump($max); // -12

Минимальный и максимальный элементы с циклом FOREACH

Решение:

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;

foreach($arr as $k => $v)
{
	if($v > $max or $max === null)
	{
		$max = $v;
		$max_key = $k;
	}

	if($v < $min or $min === null)
	{
		$min = $v;
		$min_key = $k;
	}
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Минимальный и максимальный элементы с циклом WHILE

Решение 1: счётчик + count()

Цикл будет выполняться до тех пор, пока значение счётчика $i не превысит количество элементов массива.

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;
$i = 0;

while($i < count($arr))
{
    if($arr[$i] > $max or $max === null)
    {
        $max = $arr[$i];
        $max_key = $i;
    }

    if($arr[$i] < $min or $min === null)
    {
        $min = $arr[$i];
        $min_key = $i;
    }

	$i++;
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Решение 2: счётчик + isset()

Запускаем вечный цикл while и в каждой итерации цикла проверяем существование следующего элемента с помощью isset(). Если его нет — выходим из цикла оператором break:

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;
$i = 0;

while(true)
{
	if(isset($arr[$i]))
	{
		if($arr[$i] > $max or $max === null)
		{
			$max = $arr[$i];
			$max_key = $i;
		}

		if($arr[$i] < $min or $min === null)
		{
			$min = $arr[$i];
			$min_key = $i;
		}
	}
	else
		break;

	$i++;
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Решение 3: list() + each()

Функция each() возвращает ключ и значение текущего элемента массива и смещает его внутренний указатель на единицу. Функция list() используется просто для удобства — с её помощью мы превращаем массив, который возвращает функция each, в две разные переменные:

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;
$i = 0;

while(list($k, $v) = each($arr))
{
	if($v > $max or $max === null)
	{
		$max = $v;
		$max_key = $k;
	}

	if($v < $min or $min === null)
	{
		$min = $v;
		$min_key = $k;
	}
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Получился практически аналог foreach. Единственный минус в том, что начиная с PHP 7.2 функция each() объявлена устаревшей.

Решение 4: current() + next()

Это решение похоже на предыдущее с each(). Получаем текущий элемента массива функцией current() и смещаем внутренний указатель массива функцией next(). Получить текущий ключ массива можно с помощью функции key().

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;
$i = 0;

while($v = current($arr))
{
	if($v > $max or $max === null)
	{
		$max = $v;
		$max_key = key($arr);
	}

	if($v < $min or $min === null)
	{
		$min = $v;
		$min_key = key($arr);
	}

	next($arr);
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Наибольший и наименьший элементы с циклом FOR

Решение 1: счётчик + count()

Вводим счётчик $i и увеличиваем его после каждой итерации. Цикл прекратится как только значение счётчика превысит количество элементов массива.

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;

for($i = 0; $i < count($arr); $i++)
{
    if($arr[$i] > $max or $max === null)
    {
        $max = $arr[$i];
        $max_key = $i;
    }

    if($arr[$i] < $min or $min === null)
    {
        $min = $arr[$i];
        $min_key = $i;
    }
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Решение 2: счётчик + isset()

В отличие от предыдущего варианта, мы не смотрим на количество элементов массива, а запускаем вечный цикл и в каждой итерации проверяем существование следующего элемента, и если его нет — прерываем цикл командой break:

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;

for($i = 0; true; $i++)
{
	if(!isset($arr[$i]))
		break;

    if($arr[$i] > $max or $max === null)
    {
        $max = $arr[$i];
        $max_key = $i;
    }

    if($arr[$i] < $min or $min === null)
    {
        $min = $arr[$i];
        $min_key = $i;
    }
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Решение 3: each() + list()

Функция each() возвращает массив с ключом и значением текущего элемента массива, а list() превращает этот массив в 2 разные переменные. После последнего элемента функция each() вернёт false и цикл прекратит работу.

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;
$i = 0;

for(; list($k, $v) = each($arr);)
{
    if($v > $max or $max === null)
    {
        $max = $v;
        $max_key = $k;
    }

    if($v < $min or $min === null)
    {
        $min = $v;
        $min_key = $k;
    }
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Решение 4: current() + next()

С помощью функции next() смещаем внутренний указатель массива, а функции current() и key() возвращают текущие ключ и значение. Первое и последнее выражение цикла оставляем пустыми.

<?php
$arr = [12, 4, 182, 1, 2.587];
$min = null;
$min_key = null;
$max = null;
$max_key = null;
$i = 0;

for(; $v = current($arr);)
{
	if($v > $max or $max === null)
	{
		$max = $v;
		$max_key = key($arr);
	}

	if($v < $min or $min === null)
	{
		$min = $v;
		$min_key = key($arr);
	}

	next($arr);
}

echo "Min value: $min <br> Min key: $min_key <br>";
echo "Max value: $max <br> Max key: $max_key";

Максимальное значение в ассоциативном массиве

В ассоциативных массивах отсутствует порядок или системность в названиях ключей, поэтому циклы со счётчиками здесь недоступны.

Но мы всё ещё можем использовать цикл foreach и те решения для while и for, где используются функции each() и next(), поскольку они используют не ключи, а внутренний указатель массива.

0 / 0 / 0

Регистрация: 29.03.2010

Сообщений: 14

1

В массиве найти номер максимального элемента

30.03.2010, 23:00. Показов 55360. Ответов 3


Студворк — интернет-сервис помощи студентам

В массиве найти номер максимального элемента



0



ggmann

21 / 21 / 7

Регистрация: 06.10.2008

Сообщений: 173

30.03.2010, 23:46

2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main() {
  int maxI,max;
  int array[10];
  
    for(int i = 0; i < 10; i++){
      cin >> array[i];
 
  }
 
  max = array[0];
  for(int i = 0; i < 10; i++){
   if (array[i] > max) {
        max = array[i];
        maxI = i;
       }
  }
  cout << maxI;
}

это ты хотел?

оригинал

це ти хотів?



2



0 / 0 / 0

Регистрация: 29.03.2010

Сообщений: 14

31.03.2010, 00:01

 [ТС]

3

спс за помощь.
Р.S. Модер могёш удалять тему



0



Эксперт JavaЭксперт С++

8378 / 3600 / 419

Регистрация: 03.07.2009

Сообщений: 10,708

31.03.2010, 00:08

4

SexPistols, удаляются только те темы, которые нарушают правила



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

31.03.2010, 00:08

Помогаю со студенческими работами здесь

В одномерном массиве, состоящем из N целых элементов, вычислить номер максимального элемента массива
В одномерном массиве, состоящем из N целых элементов, вычислить:
1) номер максимального элемента…

В одномерном массиве, состоящем из N целых элементов, вычислить номер максимального элемента массива
Задание:
В одномерном массиве, состоящем из N целых элементов, вычислить:
1) номер максимального…

В одномерном массиве, состоящем из N целых элементов, вычислить номер максимального элемента массива
в одномерном массиве состоящем из N целых элементов вычислить
1. номер максимального элемента…

Найти номер максимального элемента массива
Здравствуйте. Помогите пожалуйста с заданием : В одномерном массиве состоящий из N целых элементов,…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

Нахождения максимального элемента массива и его номера.

Алгоритм решения задачи следующий.
Пусть в переменной с именем Maxхранится максимальный элемент массива,
а в переменной с именемNmax- его номер. Предположим, что первый
элемент массива является максимальным,
и запишем его в переменнуюMax,
а вNmaxзапишем его номер
(т.е. 1). Затем все элементы, начиная со
второго, сравниваем с максимальным.
Если текущий элемент массива (i-й)
оказывается больше максимального, то
записываем его в переменнуюMax,
а в переменнуюNmaxтекущее
значение индексаi.

Рис.5 Нахождения
максимального элемента массива и его
номера

Соответствующий
участок программы будет иметь вид:

const
n=10;

var
x:
array
[1..n]
of
integer;

i, Max, NMax : integer;

begin

{ввод
элементов массива}

Max:=X[1];

Nmax:=1;

for
i:=2
to
N
do

if
X[i]>Max
then

begin

Max:=X[i];

Nmax:=i;

end;

writeln(‘Max = ‘,Max,’
Max position = ‘, Nmax);

В данном
примере можно обойтись одной переменной
Nmax, т.к. зная позицию
максимального элемента, мы знаем и его
значение. Тогда код можно переписать
так

Nmax:=1;

for
i:=2
to
N
do

if
X[i]>X[NMax]
then

Nmax:=i;

writeln(‘Max = ‘,X[NMax],’
Max position = ‘, Nmax);

Упорядочивание массива по возрастанию

Решим следующую задачу: задан массив
из nцелых чисел, упорядочить
массив по возрастанию. Блок-схема
представлена на рис.6. Алгоритм
упорядочивания состоит в следующем.
Сравниваем текущий и последующий
элементы массива, если текущий больше
последующего, то меняем их местами. В
результате этих действий самый большой
элемент станет на последнее место, т.е.
наN-е. Теперь повторяем
этот алгоритм дляN-1
элемента массива и устанавливаем
максимальный элемент на (N-1)-е
место. Так повторяем до тех пор, пока не
упорядочим весь массив. Для упорядочивания
по убыванию необходимо при сравнении
элементов массива заменить знак “больше”
на знак “меньше”. Такой метод получил
название пузырьковой сортировки.

Рис.6. Алгоритм
упорядочивания массива

Пример программы
упорядочивания массива (пузырьковая
сортировка).

const
n=10;

var 
i,j,b: integer;

y:
array
[1..n]
of
integer;

begin

for
i:=1
to
n
do
//
ввод
элементов массива

    begin

        write(‘y[‘,i’]=’);
 readln (y[i]);

    end;

writeln
(‘
массив
y ‘);

for
i:=1
to
n
do

//
вывод
элементов массива

write (y [i],’
‘); 

writeln;

for
j:=1
to
n-1
do

for
i:=1
to
n-j
do

        if 
y[i] > y[i+1] 
then

           
begin
//
Меняем
элементы местами

               
b:=y[i];

               
y[i]:=y[i+1];

               
y[i+1]:=b;

           
end;

writeln(‘упорядоченный
массив‘);

for
i:=1
to
n
do
 

write (y[i],’
‘); 

writeln;

end.

Пузырьковая сортировка является самой
медленной. Так как для размещения
элемента на свое место необходимо много
раз переставить его с соседними
элементами. Сортировка выбором (selectionsort) работает несколько
быстрее пузырьковой, т.к. в ней существенно
меньше перестановок элементов. Задача
сортировки выбором — искать наименьший
элемент, который затем меняется местами
с элементом из начала массива. Затем
находится наименьший из оставшихся
элементов и меняется местами со вторым
элементом. Процесс продолжается до тех
пор, пока все элементы не займут свое
конечное положение.

const
n=10;

var 
i,j,x,k: integer;

M:
array
[1..n]
of
integer;

{x-значение
минимального элемента,
k
позиция минимального элемента
}

begin

………

For
I:=1
to
N-1
do

begin

k:=i;{запоминаем
начальную позицию и первое значение
минимума
}

X:=M[i];

For
J:=i+1
to
n
do
{
поиск
нового минимального значения
}

If
M[j] < x
then

begin

k:=j;

x:=M[k];

end;

If
i<>k
then
begin

M[k]:=M[i];{меняем
местами
i
и минимальный
k}

M[i]:=x;
end;

end;

……

end.

Есть методы, которые находят максимальный и минимальный элементы массива.
Как найти индексы этих элементов?

import java.util.Arrays;

public class F {
    static double max = 0;
    private static double array[] = { 0.22, 0.4, 0.92, 1.5, 1.99, 4.5 };

    public static void main(String[] args) {
        findMax(array);
        findMin(array);
    }

    public static void findMax(double[] array) {
        Arrays.sort(array);
        max = array[array.length - 1];
        System.out.println(max);
    }

    public static void findMin(double[] array) {
        double min = array[0];
        for (int i = 0; i < array.length; i++) {
            if (array[i] < array[0]) {
                min = array[i];
            }
        }
        System.out.println(min);
    }

    public static void findIndexOfMax() {
       //код метода, который находит и возвращает индексы
       // максимального и минимального элементов массива
    }
}

Regent's user avatar

Regent

19.1k6 золотых знаков29 серебряных знаков44 бронзовых знака

задан 1 мар 2017 в 13:16

Ekaterina's user avatar

3

Можно, конечно, отсортировать массив по возрастанию с помощью Arrays.sort() (тогда минимальный элемент будет иметь индекс 0, а максимальный — array.length - 1), но сортировка массива и его изменение ради поиска значений не является оптимальным решением.

Индексы минимального и максимального элементов можно найти за линейное время, не изменяя массив:

double[] array = { 0.22, 0.4, 0.92, 1.5, 1.99, 4.5 };
int indexOfMax = 0;
int indexOfMin = 0;
for (int i = 1; i < array.length; i++)
{
    if (array[i] > array[indexOfMax])
    {
        indexOfMax = i;
    }
    else if (array[i] < array[indexOfMin])
    {
        indexOfMin = i;
    }
}
System.out.println(indexOfMax + " " + indexOfMin);

ответ дан 1 мар 2017 в 13:25

Regent's user avatar

RegentRegent

19.1k6 золотых знаков29 серебряных знаков44 бронзовых знака

За столько времени никто не увидел, что метод findMin работает некорректно?

Тестируйте { 10.2, 2.2, 2.5 }. Только не (array[i] < array[0]), а (array[i] < min)

Dmitrii's user avatar

Dmitrii

2,6473 золотых знака9 серебряных знаков20 бронзовых знаков

ответ дан 15 мар 2020 в 21:38

user376773's user avatar

0

Понравилась статья? Поделить с друзьями:
  • Как составьте корреспонденцию счетов
  • Как найти атомную массу цинка
  • Iohandler value is not valid как исправить
  • Как называются неизвестные числа в равенствах найдите
  • Как составить бухгалтерские проводки в бюджетном учете