Как найти количество минимумов в массиве

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

var
  s, i: integer;
  A: array [1..5] of integer;
  min := 367131;

begin
  randomize; 
  for i := 1 to 5  do 
    a[i] := Random(1, 5);
  begin
    for i := 1 to 5 do write(a[i], ' ');
    for i := 1 to 5 do
    begin
      if (a[i] < min) and (a[i] >= 0) then  
      begin
        min := a[i]; 
      end;
      if a[i] = min then 
      begin
        s := s + 1; 
      end;
    end;
  end;
  writeln('Минимальный:', min, ' Количество - ', s);
end.

Kromster's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 20 мая 2021 в 9:21

Nikita's user avatar

2

Необходимо 2 цикла – в одном искать минимум, во втором подсчитывать количество равных минимуму, либо в вашем цикле при нахождении нового минимума обнулять счетчик:

for i := 1 to 5 do
    begin
      if (a[i] < min) and (a[i] >= 0) then  
      begin
        min := a[i];
        s : = 0;
      end;
      if a[i] = min then 
      begin
        s := s + 1; 
      end;
    end;

В вашей реализации подсчитается количество элементов равных или меньше ВСЕХ предыдущих.

И еще. переменную s в начале программы надо инициализировать s:=0;

ответ дан 20 мая 2021 в 9:43

Sergey  Tatarintsev's user avatar

Sergey TatarintsevSergey Tatarintsev

5,8452 золотых знака5 серебряных знаков14 бронзовых знаков

1

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    You are given an array on n-elements. An extrema is an elements which is either greater than its both of neighbors or less than its both neighbors. You have to calculate the number of local extrema in given array. 
    Note : 1st and last elements are not extrema.

    Examples : 

    Input : a[] = {1, 5, 2, 5}
    Output : 2
    
    Input : a[] = {1, 2, 3}
    Output : 0

    Approach :For calculating number of extrema we have to check whether an element is maxima or minima i.e. whether it is greater than both of its neighbors or less than both neighbors. For this simply iterate over the array and for each elements check its possibility of being an extrema.

    Note: a[0] and a[n-1] has exactly one neighbour each, they are neither minima nor maxima.

    Implementation:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    int extrema(int a[], int n)

    {

        int count = 0;

        for (int i = 1; i < n - 1; i++)

        {

            count += (a[i] > a[i - 1] && a[i] > a[i + 1]);

            count += (a[i] < a[i - 1] && a[i] < a[i + 1]);

        }

        return count;

    }

    int main()

    {

        int a[] = { 1, 0, 2, 1 };

        int n = sizeof(a) / sizeof(a[0]);

        cout << extrema(a, n);

        return 0;

    }

    Java

    import java.io.*;

    class GFG {

        static int extrema(int a[], int n)

        {

            int count = 0;

            for (int i = 1; i < n - 1; i++)

            {

                if(a[i] > a[i - 1] && a[i] > a[i + 1])

                    count += 1;

                if(a[i] < a[i - 1] && a[i] < a[i + 1])

                    count += 1;

            }

            return count;

        }

        public static void main(String args[])

                                throws IOException

        {

            int a[] = { 1, 0, 2, 1 };

            int n = a.length;

            System.out.println(extrema(a, n));

        }

    }

    Python3

    def extrema(a, n):

        count = 0

        for i in range(1, n - 1) :

            count += (a[i] > a[i - 1] and a[i] > a[i + 1]);

            count += (a[i] < a[i - 1] and a[i] < a[i + 1]);

        return count

    a = [1, 0, 2, 1 ]

    n = len(a)

    print(extrema(a, n))

    C#

    using System;

    class GFG {

        static int extrema(int []a, int n)

        {

            int count = 0;

            for (int i = 1; i < n - 1; i++)

            {

                if(a[i] > a[i - 1] && a[i] > a[i + 1])

                    count += 1;

                if(a[i] < a[i - 1] && a[i] < a[i + 1])

                    count += 1;

            }

            return count;

        }

        public static void Main()

        {

            int []a = { 1, 0, 2, 1 };

            int n = a.Length;

        Console.WriteLine(extrema(a, n));

        }

    }

    PHP

    <?php

    function extrema($a, $n)

    {

        $count = 0;

        for ($i = 1; $i < $n - 1; $i++)

        {

            $count += ($a[$i] > $a[$i - 1] and

                       $a[$i] > $a[$i + 1]);

            $count += ($a[$i] < $a[$i - 1] and

                       $a[$i] < $a[$i + 1]);

        }

        return $count;

    }

    $a = array( 1, 0, 2, 1 );

    $n = count($a);

    echo extrema($a, $n);

    ?>

    Javascript

    <script>

       function extrema(a,  n)

        {

            let count = 0;

            for (let i = 1; i < n - 1; i++)

            {

                if(a[i] > a[i - 1] && a[i] > a[i + 1])

                    count += 1;

                if(a[i] < a[i - 1] && a[i] < a[i + 1])

                    count += 1;

            }

            return count;

        }

            let a = [ 1, 0, 2, 1 ];

            let n = a.length;

            document.write(extrema(a, n));

    </script>

    Time Complexity: O(n)
    Auxiliary Space: O(1)

    Last Updated :
    29 Jul, 2022

    Like Article

    Save Article

     В этой статье рассмотрены два способа нахождения минимального (максимального) элемента массива, а также задачи с применением этих способов.

    1 способ

    Задача 1: Дан одномерный массив, состоящий из n целых чисел. Найти минимальный элемент массива. В первой строке вводится количество чисел в массиве n. Затем выводятся сами числа, заданные случайным образом. В третьей строке выводится результат: минимальный элемент массива.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  23  0  8  6  -1

    -4

    10
    0  4  5  2  77  62  4  8  0  45

    0

    Считаем, что первый элемент массива – минимальный.  Затем, сравниваем, начиная со второго до последнего все элементы массива с минимальным. Используем для этого цикл. Если очередной элемент на каком-то шаге цикла оказывается меньше минимального, то значение минимального изменяем, присвоив ему значение этого очередного элемента. По окончании цикла выводим результат: минимальный элемент.

    program min1;
    var a:array[1..100] of integer;
    i,min,n:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(-100,100);
    write(a[i],’ ‘);
    end;
    //нахождение минимального элемента массива
    min:=a[1];
    for i:=2 to n do
    if min>=a[i] then min:=a[i];
    //вывод результата
    writeln;
    write(min);
    end.

    Заметим, что для нахождения максимального элемента массива достаточно заменить имя переменной min на max и знак >= на знак <=.

    Задача 2: Дан одномерный массив, состоящий из n целых чисел. Найти индекс минимального элемент массива. В первой строке вводится количество чисел в массиве n. Затем выводится массив, заданный случайным образом. В третьей строке выводится результат: индекс минимального элемент массива.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  23  0  8  6  -1

    5

    10
    0  4  5  2  77  62  4  8  0  45

    9

    Если в задаче требуется найти индекс минимального (максимального), то вводим переменную imin, в которую будем запоминать индекс минимального (максимального), причем первоначально ее значение равно 1.

    program min2;
    var a:array[1..100] of integer;
    i,min,n,imin:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(-100,100);
    write(a[i],’ ‘);
    end;
    //нахождение индекса минимального элемента массива
    min:=a[1];
    imin:=1;
    for i:=2 to n do
    if min>=a[i] then begin
    imin:=i;
    min:=a[i];
    end;
    //вывод результата
    writeln;
    write(imin);
    end.

    Если в массиве есть несколько равных между собой минимальных элементов, то данная программа найдет номер последнего (правого) элемента. Для того чтобы найти индекс первого (левого) элемента достаточно изменить знак  >= на строгий знак >.
    Эту программу можно оптимизировать, так как, зная индекс минимального элемента, можно найти значение минимального элемента массива. Значит, переменная min не нужна:

    var a:array[1..100] of integer;
    i,n,imin:integer;

    Фрагмент нахождения индекса минимального элемента массива выглядит так:

    imin:=1;
    for i:=2 to n do
    if a[imin]>=a[i] then imin:=i;

    Задача 3: Дан одномерный массив, состоящий из n целых чисел. Найти количество минимальных элементов массива. В первой строке вводится количество чисел в массиве n. Затем выводится массив, заданный случайным образом. В третьей строке выводится результат: количество минимальных элементов массива.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  23  0  8  -4  -1

    2

    10
    0  4  5  2  77  0  4  8  0  45

    3

    program min3;
    var a:array[1..100] of integer;
    i,min,n,k:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(-5,5);
    write(a[i],’ ‘);
    end;
    //нахождение минимального элемента массива
    min:=a[1];
    for i:=2 to n do
    if min>=a[i] then
    min:=a[i];
    //считаем количество равных элементов
    k:=0;
    for i:=1 to n do
    if a[i]=min then k:=k+1;
    //вывод результата
    writeln;
    write(k);
    end.

    Задача 4: Дан целочисленный массив из n элементов. Элементы массива могут принимать целые значения от 0 до 1000. Напишите программу, находящую минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на четыре. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно четырем. В первой строке вводится количество чисел в массиве n. Затем выводится массив, заданный случайным образом. В третьей строке выводится результат: минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на четыре.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  22  0  -8  -6  -1

    -6

    10
    0  4  5  -10  77  0  4  -12  0  45

    -10

    В этой задаче первый способ нахождения минимального не подойдет. Первый элемент массива может оказаться меньше, чем минимальный четный и не кратный четырем и программа выведет неверный результат. Каким должно быть начальное значение переменной min? Его нужно выбрать таким, чтобы для первого же «подходящего» элемента выполнилось условие a[i] < min, и это «временное» начальное значение было бы заменено на реальное. Такое «подходящее» обязательно будет, так как это гарантировано условием задачи. Оно должно быть большим и таким, какое не может быть по условию задачи, например, 1001.

    Кроме того заметим, что задавать элементы массива нужно с клавиатуры, чтобы обеспечить условия задачи.

    Итак, находим минимальный элемент вторым способом.

    2 способ

    Записываем в переменную min значение 1001. Затем в цикле просматриваем все элементы массива, с первого до последнего. Если остаток от деления очередного элемента на 2 равен 0 и остаток от его деления на 4 не равен нулю и значение элемента меньше, чем значение переменной min, сохраняем в переменную min значение очередного элемента массива. После окончания работы цикла выводим значение переменной min.

    program min4;
    var a:array[1..100] of integer;
    i,min,n:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do
    readln(a[i]);
    for i:=1 to n do
    write(a[i],’ ‘);
    //нахождение минимального элемента массива
    min:=1001;
    for i:=1 to N do
    if (a[i] mod 2=0) and (a[i] mod 4 <> 0) and (a[i]<min) then
      min:=a[i];
    //вывод результата
    writeln;
    write(min);
    end.

    Проверяем на тестах:

    10
    411 837 755 90 520 203 581 798 401 640

    90

    10
    195 264 127 936 658 152 339 504 395 553

    658

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

    program min5;
    var a:array[1..100] of integer;
    i,min,n,j:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do
    readln(a[i]);
    for i:=1 to n do
    write(a[i],’ ‘);
    //нахождение первого четного и не кратного 4 числа
    i:=1;
    while (i<=n)and not((a[i] mod 2=0) and (a[i] mod 4 <> 0)) do i:=i+1;
    //в переменной i запомнился номер первого элемента, удовлетворяющего условию
    //нахождение минимального, начиная со следующего за найденным
    min:=a[i];
    for j:=i+1 to N do
    if (a[j] mod 2=0) and (a[j] mod 4 <> 0) and (a[j]<min) then
      min:=a[j];
    //вывод результата
    writeln;
    write(min);
    end.

    Задача 5: Дан целочисленный массив из n элементов. Элементы массива могут принимать произвольные целые значения. Напишите программу, которая находит и выводит второй максимум массива (элемент, который в отсортированном по невозрастанию массиве стоял бы вторым).

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  22  0  -8  -6  -1

    14

    10
    0  4  5  -10  77  0  4  -12  0  45

    45

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

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

    program min6;
    var a: array [1..100] of integer;
    i, k,n, max1, max2: integer;
    begin
      //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(0,100);
    write(a[i],’ ‘);
    end;
    //начальные значения max1 и max2
    if a[1] > a[2] then begin
    max1:=a[1]; max2:=a[2]
    end
    else begin
    max1:=a[2]; max2:=a[1]
    end;
    // поиск второго максимального
    for i:=3 to N do
    if a[i] > max1 then begin
    max2:= max1;
    max1:= a[i]
    end
    else
    if a[i] > max2 then max2:=a[i];
    //вывод результата
    writeln;
    writeln(max2);
    end.

    Задача 6: Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Напишите программу, позволяющую найти и вывести минимальный элемент массива, шестнадцатеричная запись которого содержит ровно две цифры, причём первая (старшая) цифра больше второй (младшей).  Если таких чисел нет, нужно вывести ответ 0.

    Исходные данные:

    Результат:

    20
    5  -2  14  7  -4  22  0  -8  -6  -1

    14

    10
    0  4  5  -10  77  0  4  -12  0  45

    45

    Эта задача усложнена только тем, что элементы массива должны быть в диапазоне от 16 до 255. В этом случае первая цифра находится как результат деления нацело на 16, а вторая цифра – как остаток от деления на 16.

    Кроме этого здесь массив можно объявить через константу n, так как размер массива задан явно: 20 элементов.

    program z6;
    //объявление массива через константу
    const n=20;
    var a: array [1..n] of integer;
    i,min: integer;
    begin
      //заполнение массива и вывод массива в строчку
    for i:=1 to n do begin
    a[i]:=random(0,10000);
    write(a[i],’ ‘);
    end;
    writeln;
    min := 10001;
    for i := 1 to n do begin
    //для проверки правильности программы выведем две шестнадцатеричные цифры:
    //write(a[i] div 16,a[i] mod 16,’ ‘);
    if (16 <= a[i]) and (a[i] < 256) and (a[i] div 16 > a[i] mod 16) and (a[i] < min) then
        min := a[i];
    end;
    writeln;
    //вывод результата
    if min = 10001 then
      writeln(0)
    else
      writeln(min);
    end.

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

    1. Дан целочисленный массив из n элементов. Элементы могут принимать значения от 150 до 210 ­– рост учащихся выпускного класса. В волейбольную команду берут тех, чей рост не менее 170 см. Напишите программу, которая определяет и выводит минимальный рост игрока баскетбольной команды. Гарантируется, что хотя бы один ученик играет в баскетбольной команде.
    2. Дан целочисленный массив из n элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за экзамен по информатике. Для получения положительной оценки за экзамен требовалось набрать не менее 50 баллов. Напишите программу, которая находит и выводит минимальный балл среди учащихся, получивших за экзамен положительную оценку. Известно, что в классе хотя бы один учащийся получил за экзамен положительную оценку.
    3. Дан целочисленный массив – сведения о температуре за каждый день октября. Элементы массива могут принимать целочисленные значение значения от -15 до 20. Напишите программу, которая находит и выводит максимальную температуру среди дней, когда были заморозки (температура опускалась ниже нуля). Гарантируется, что хотя бы один день в октябре была отрицательная температура.
    4. Дан целочисленный массив из n элементов, все элементы которого – неотрицательные числа, не превосходящие 10000. Напишите программу, которая находит и выводит минимальное трехзначное число, записанное в этом массиве. Если таких чисел нет, нужно вывести сообщение «Таких чисел нет».
    5. Дан целочисленный массив из n элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Напишите программу, позволяющую найти и вывести наибольший из элементов массива, шестнадцатеричная запись которого оканчивается на букву F. Если таких чисел нет, нужно вывести ответ 0.
    6. Дан целочисленный массив из n элементов. Элементы массива могут принимать произвольные целые значения. Напишите программу, которая находит и выводит номера двух элементов массива, сумма которых минимальна.
    7. Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Напишите программу, находящую минимальный элементов массива, шестнадцатеричная запись которого содержит ровно две цифры, причём вторая (младшая) цифра – это буква (от A до F). Если таких чисел нет, нужно вывести ответ 0.

    Источники информации

    1. Угринович Н.Д. Информатика и информационные технологии. Учебник для 10-11 классов/ Н.Д. Угринович. – М.:Бином. Лаборатория знаний, 2005.
    2. Сайт К. Полякова http://kpolyakov.spb.ru/school/ege.htm
    Количество минимальных элементов массива на Pascal

    Добрый день, товарищи!

    Продолжая знакомится с одномерными массивами на языке программирования Pascal я предлагаю решить нам следующую задачу:

    Дан одномерный целочисленный массив из 10 элементов. Числа случайны в диапазоне -10…10.

    Сосчитать количество отрицательных элементов массива.

    Звучит несколько сложно, нужно будет использовать генератор случайных чисел, соответственно, функцию random. Но, нерешимых задач не бывает, поэтому начнем.

    1. Переменные, определяем массив

    Количество минимальных элементов массива на Pascal

    Здесь мы определяем наш массив типа Integer, а так же две переменные – счетчик для цикла и переменную для подсчета количества отрицательных чисел.

    В предыдущей статье по массивам (это ссылка!) я рассказывал, почему массив определяется именно так.

    2. Запускаем крутиться цикл

    Для генерации элементов массива нам нужен цикл for
    Для генерации элементов массива нам нужен цикл for

    Так как в задании говорится о 10 элементов массива – нам нужен цикл. Почему от 0 до 9, а не от 1 до 10, спросите вы?

    Потому что циклы в Pascal, да и в большинстве других языков программирования начинают свой отсчет с 0. Это просто стоит запомнить.

    3. Основной функционал цикла

    Здесь вы видите основной код всей программы
    Здесь вы видите основной код всей программы

    Элемент массива задается в первой строчке, путем использования функции random. (20)-10 означает, что береться диапазон в 20 чисел, начиная с -10.

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

    После этого в конструкции if проверяется, меньше ли текущий элемент массива числа 0, и если да, то данные об этом записываются в переменную min.

    4. Выводим итоговый ответ

    Выводим пользователю ответ
    Выводим пользователю ответ

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

    Давайте протестируем нашу программу.

    5. Тесты программы

    Во втором и третьем тесте получилось интересно, первые два элемента совпали. По поводу остальных тестов можно сказать – программа работает правильно.

    6. Код программы

    Программа
    Программа

    Целиком код написанной программы выглядит так. Если вам необходимо, вы можете скачать этот код с Яндекс.Диска по ссылке ниже:

    Скачать этот код с Яндекс.Диска

    7. Заключение

    Спасибо, что прочитали эту статью, надеюсь, она оказалась вам полезна.

    Количество минимальных элементов массива на Pascal

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

    По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала.

    Доброго вам всем здоровьица в эти трудные времена!

    Формулировка задачи:

    Привет. Нужна помощь в задачках, т.к. уеду до 31 числа. Не будет интернета и ПК.

    Дан массив, содержащий 2014 положительных целых чисел. Напишите на одном из языков
    программирования программу, которая находит в этом массиве количество локальных минимумов.
    Локальным минимумом называется элемент массива, который меньше всех своих соседей. Например, в
    массиве из 6 элементов, содержащем числа 4, 6, 12, 7, 3, 8, есть два локальных минимума: это
    элементы, равные 4 и 3. Программа должна вывести общее количество подходящих элементов, значения элементов выводить не нужно. Исходные данные объявлены так, как показано ниже.
    Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из
    описанных.

    Заранее благодарю.
    Без “Спасибо” Вас не оставлю!
    P.S. Уважаемая администрация, не удаляйте мои темы из-за их похожести

    Код к задаче: «Найти в массиве количество локальных минимумов»

    textual

    CONST
      N = 2014;
    VAR
      a: Array [1..N] of integer;
      i, j, k: integer;
    BEGIN
      For i := 1 to N do
        Readln(a[i]);
     
      For i := 2 to (N-1) do
        If (a[i-1] > a[i])and(a[i] < a[i+1]) then Inc(k);
        
      If (a[1] < a[2]) then Inc(k);
      If (a[N-1] > a[N]) then Inc(k);
      
      Write(k);
    END.

    Полезно ли:

    14   голосов , оценка 4.071 из 5

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