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

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

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

Просмотров 17.8к. Обновлено 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

1 ответ

Сортировка:

Сброс на вариант по умолчанию

1

Для нахождения большего элемента в массиве(Предположим int, в вопросе не сказан тип данных) нужно сделать примерно так:

int maxValue = yourList.Max<int>();

А для определнения его индекса можно использовать IndexOf:

int index = Array.IndexOf(yourList, maxValue);

Улучшить ответ

ответ дан 25 дек 2022 в 9:22

FiolDoll's user avatar

FiolDollFiolDoll

12111 бронзовых знаков

Добавить комментарий
 | 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками

  • c#
  • массивы

или задайте свой вопрос.

anastalex

0 / 0 / 1

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

Сообщений: 143

1

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

16.01.2016, 18:05. Показов 10130. Ответов 5

Метки нет (Все метки)


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

В данном коде в 29 строке (отметила комментарием) я пыталась вывести порядковый номер максимального элемента, но команда выводит номер последнего элемента в массиве. В чём ошибка?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
 
using namespace std;
int main()
{
    setlocale(0, "");
 
    const int n=10;
    int a[n]={10,9,8,7,6,5,4,3,2,1};
 
    for (int i = 0; i < n; i++) {
        cout << a[i] << endl;
    }
    int A,B;
      cout<<"Введите A (от 1 до 10): ";
      cin>>A;
      cout<<"Введите B (B>A): ";
      cin>>B;
 
    int C=B-A;
      cout<<"Количество элементов массива, лежащих в диапазоне от "<<A<<" до "<<B<<" равно "<<C<<endl;
    int iMax = 0;
    int max = a[0];
    for (int i = 1; i < n; i++){
 
            if (a[i] > max)
            max = a[i];
            iMax = i+1; //29
            }
cout << "Максимальный элемент массива: "<< max << ",номер в массиве: "<<iMax<<endl;
 
    return 0;
}



0



Perfilov

265 / 165 / 56

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

Сообщений: 435

16.01.2016, 18:16

2

ставьте скобки, иначе у вас iMax безусловно увеличивается.

C++
1
2
3
4
5
if (a[i] > max)
{
  max = a[i];
  iMax = i+1; //29
}



1



0 / 0 / 1

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

Сообщений: 143

17.01.2016, 17:33

 [ТС]

3

Perfilov, теперь номер в массиве постоянно обозначается нулём



0



4 / 4 / 1

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

Сообщений: 15

17.01.2016, 17:46

4

стоит инициализировать iMax = 1, т.к если первый элемент массива будет максимальным, то условие внутри цикла не сработает и в результате выведет 0.



1



0 / 0 / 1

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

Сообщений: 143

17.01.2016, 18:14

 [ТС]

5

Perfilov, Разобралась, спасибо за помощь)

Добавлено через 2 минуты
Сделала так, как вы сказали. Всё получилось, но я не уловила логики. Почему iMax должно быть = 1?



0



GbaLog-

Любитель чаепитий

3737 / 1796 / 563

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

Сообщений: 6,014

Записей в блоге: 1

17.01.2016, 18:17

6

anastalex, Мне кажется, что так лучше, но это чисто моё мнение.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
 
using namespace std;
int main()
{
    setlocale(0, "");
 
    const int n=10;
    int a[n]={10,9,8,7,6,5,4,3,2,1};
 
    for (int i = 0; i < n; i++) {
        cout << a[i] << endl;
    }
    int A,B;
      cout<<"Введите A (от 1 до 10): ";
      cin>>A;
      cout<<"Введите B (B>A): ";
      cin>>B;
 
    int C=B-A;
      cout<<"Количество элементов массива, лежащих в диапазоне от "<<A<<" до "<<B<<" равно "<<C<<endl;
    int iMax = 0;
    for (int i = 0; i < n; i++){
 
            if (a[i] > arr[iMax])
            iMax = i;
            }
cout << "Максимальный элемент массива: "<< arr[iMax] << ",номер в массиве: "<<iMax<<endl;
 
    return 0;
}



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

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

17.01.2016, 18:17

6

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

Алгоритм решения задачи следующий.
Пусть в переменной с именем 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.

program pr;
const
n=50;
var
c:array [1..n] of integer;
i,max,index:integer;
begin
max:=c[1];
for i:=1 to 50 do
begin
c[i]:=-10+random(31);         // диапазон заполнения массива можешь ставить какой хочешь 
write(c[i]:3);
if c[i]>max then
begin
max:=c[i];
index:=i;
end;
end;
writeln;
writeln('Максимальный элемент: ',max);
writeln('Порядковый номер максимального элемента: ',index);
end.

Понравилась статья? Поделить с друзьями:
  • Как найти видеоредактор на виндовс 10
  • Как найти экзоскелет в сталкере первом
  • Как найти объем комнаты формула физика
  • Как найти актрису по лицу
  • Книга как найти мужчину моей мечты