Главная » Дан целочисленный массив... Второй максимум...
18:12

Дан целочисленный массив... Второй максимум...


Задание:

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит второй максимум массива (элемент, который в отсортированном по невозрастанию массиве стоял бы вторым). Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30; 
var a: array [1..N] of integer; 
    i, k, max, max2: integer; 
begin
  for i:=1 to N do readln(a[i]); 
  ...
end.

Объявляем массив A из 30 элементов. Объяв-ляем целочисленные переменные i, k, max, max2. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. 
...

Си

 

#include<stdio.h> 
int main(void) { 
  const int N=30; 
  int a[N]; 
  int i, k, max, max2; 
  for (i=0; i<N; i++)
    scanf(″%d″, &a[i]); 
  ...
}

 

Решение:

Сложность в том, что нужно найти не  максимальный элемент, а второй по величине. Можно, конечно, сначала найти максимум, а потом искать следующий за ним, но можно сделать это за один проход по массиву. Нам нужны две переменные, max (максимальный элемент) и max2 (второй максимум). Сначала выбираем максимальный из первых двух элементов и записываем его значение в max, а второй по величине записываем в max2:

  1. if a[1] > a[2] then begin
  2.   max:=a[1]; max2:=a[2]; 
  3. end
  4. else begin
  5.   max:=a[2]; max2:=a[1]; 
  6. end;

Затем в цикле перебираем все элементы, начиная с 3-го (первые два уже «задействованы»!) до последнего, 30-ого. Если очередной элемент a[i] больше, чем max, записываем значение max в max2 (предыдущий максимум становится вторым), а значение a[i] – в max. Иначе, если a[i] больше, чем max2, записываем значение a[i] в max2. После завершения цикла выводим значение переменной max2. Вот решение на Паскале:

  1. const N=30;
  2. var a: array [1..N] of integer;
  3. i, k, max, max2: integer;
  4. begin
  5.   for i:=1 to N do readln(a[i]);
  6.   if a[1] > a[2] then begin
  7.     max:=a[1]; max2:=a[2] 
  8.   end
  9.   else begin
  10.     max:=a[2]; max2:=a[1] 
  11.   end;
  12.   for i:=3 to N do
  13.     if a[i] > max then begin
  14.       max2 := max;
  15.       max := a[i]
  16.     end
  17.     else if a[i] > max2 then max2 := a[i];
  18.   writeln(max2)
  19. end.

Похожие материалы:
Нашли ошибку на сайте? Напишите в комментариях!
Категория: Язык программирования: Паскаль | Просмотров: 64 | Добавил: Ученик | Рейтинг: 5.0/1