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

0 / 0 / 0

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

Сообщений: 92

1

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

11.03.2016, 19:32. Показов 1531. Ответов 4


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

Дан одномерный целочисленный массив A, содержащий N элементов. Вывести
на экран номер последнего минимального элемента.
Примечание. Количество элементов N необходимо вводить с клавиатуры. Элементы
массива A[i] необходимо сгенерировать в диапазоне от -15 до 15.



0



ViterAlex

8927 / 4839 / 1885

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

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

11.03.2016, 20:01

2

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
static void Main(string[] args)
{
    Console.Write("Размер массива: ");
    int N = int.Parse(Console.ReadLine());
    int[] A = new int[N];
    Random rnd = new Random(DateTime.Now.Millisecond);
 
    for (int i = 0; i < A.Length; i++)
    {
        A[i] = rnd.Next(-15, 15);
    }
 
    int min = A[0], index = 0;
    for (int i = 0; i < A.Length; i++)
    {
        if (A[i] <= min)
        {
            min = A[i];
            index = i;
        }
    }
 
    Console.WriteLine("Массив: {0}", string.Join(", ", A));
    Console.WriteLine("Последний минимальный элемент находится на {0} позиции", index);
    Console.Read();
}



0



Spiderman5

38 / 38 / 30

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

Сообщений: 219

11.03.2016, 21:14

3

Немного улучшил прошлый пример, чтобы перебор шёл с конца, чтобы меньше времени тратилось на проверку < min

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
            Console.Write("Размер массива: ");
            int N = int.Parse(Console.ReadLine());
            int[] A = new int[N];
            Random rnd = new Random();
 
            for (int i = 0; i < A.Length; i++)
            {
                A[i] = rnd.Next(-15, 16);
            }
 
            int min = A[A.Length - 1], index = A.Length - 1;
 
            for (int i = A.Length - 1; i >= 0; i--)
            {
                if (A[i] < min)
                {
                    min = A[i];
                    index = i;
                }
            }
 
            Console.WriteLine("Массив: {0}", string.Join(", ", A));
            Console.WriteLine("Последний минимальный элемент находится на {0} позиции", index);
            Console.Read();



0



ViterAlex

8927 / 4839 / 1885

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

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

11.03.2016, 22:01

4

Цитата
Сообщение от Spiderman5
Посмотреть сообщение

Немного улучшил

За счёт чего будет прирост скорости? Для поиска минимума всё равно нужно перебрать все элементы массива. И скорость будет зависеть только от положения этого элемента. Если он ближе к концу массива, то твой метод быстрее, если ближе к началу — мой. В остальном они идентичны по скорости, в чём можно убедиться:

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

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Размер массива: ");
        int N = int.Parse(Console.ReadLine());
        int[] A = new int[N];
        Random rnd = new Random(DateTime.Now.Millisecond);
 
        for (int i = 0; i < A.Length; i++)
        {
            A[i] = rnd.Next(-15, 15);
        }
 
        List<Func<int[], int>> functions = new List<Func<int[], int>>()
        {
            FindMinPos,
            FindMinPosReverse
        };
        Stopwatch sw = new Stopwatch();
        Console.WriteLine("Массив: {0}", string.Join(", ", A));
        int result;
        foreach (var func in functions)
        {
            GC.Collect();
            sw.Reset();
            sw.Start();
            result = func(A);
            sw.Stop();
            Console.WriteLine("Последний минимальный элемент находится на {0} позиции", result);
            Console.WriteLine("{0,-20}{1}", func.Method.Name, sw.ElapsedTicks);
        }
        Console.Read();
    }
 
    static int FindMinPos(int[] a)
    {
        int min = a[0], index = 0;
        for (int i = 0; i < a.Length; i++)
        {
            if (a[i] <= min)
            {
                min = a[i];
                index = i;
            }
        }
        return index;
    }
 
    static int FindMinPosReverse(int[] a)
    {
        int min = a[a.Length - 1], index = a.Length - 1;
 
        for (int i = a.Length - 1; i >= 0; i--)
        {
            if (a[i] < min)
            {
                min = a[i];
                index = i;
            }
        }
        return index;
    }
}



0



38 / 38 / 30

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

Сообщений: 219

11.03.2016, 23:06

5

Да, согласен !



0



13.1. Поиск максимального (минимального) элемента в массиве

Очень часто для решения задачи требуется находить не заданный элемент массива, а максимальный (наибольший) или минимальный (наименьший) элемент.

Рассмотрим задачу нахождения максимального элемента. Если в массиве один-единственный элемент, то он и есть максимальный. Если элементов больше одного, то максимальным в массиве из i элементов является максимум из a[i] и максимального среди первых i — 1 элементов. Находить максимум будем последовательно, сравнивая текущий элемент с максимумом, найденным на предыдущем шаге. Если текущий элемент больше, то значение максимума, найденное на предыдущем шаге, нужно обновить (пример 13.1).

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

Будем использовать переменную n_max для хранения индекса максимального элемента. Значение переменной n_max будет изменятся тогда, когда изменяется значение максимального элемента (пример 13.2).

Если в массиве несколько элементов имеют максимальное значение, то значением переменной n_max будет индекс первого из них. Если использовать условие a[i] >= max, то переменная n_max будет хранить индекс последнего из максимальных элементов.

Если известен индекс i элемента массива, то значение этого элемента можно получить, обратившись к элементу по индексу: a[i]. Поэтому при поиске максимального элемента достаточно хранить только его индекс n_max. Значение максимального элемента — a[n_max] (пример 13.3).

Поиск минимального элемента осуществляется аналогично. В программе достаточно заменить знак > в условии оператора ветвления на знак < (пример 13.4). Имя переменной для хранения номера минимального элемента — n_min.

Пример 13.1.

V. Программа:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

  int n;

  cout << «n = «;

  cin >> n;

  vector <int> a(n);

  for (int i = 0; i < n; i++)

    cin >> a[i];

  //поиск максимального элемента

  int Max = a[0];

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

    if (a[i] > Max)

      Max = a[i];

  cout << «max = « << Max;

  cout << endl;

  return 0;

}

VI. Тестирование.

Пример 13.2.

V. Программа:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

  int n;

  cout << «n = «;

  cin >> n;

  vector <int> a(n);

  for (int i = 0; i < n; i++)

    cin >> a[i];

  //поиск максимального элемента

  int Max = a[0], n_max = 0;

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

    if (a[i] > Max){

      Max = a[i];

      n_max = i;

    }

  cout << «max = « << Max;

  cout << » ego mesto « << n_max;

  cout << endl;

  return 0;

}

VI. Тестирование.

Пример 13.3. Фрагмент программы:

int n_max = 0;

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

  if (a[i] > a[n_max])

    n_max = i;

cout << «max = « << a[n_max];

cout << » ego mesto « << n_max;

Пример 13.4. Фрагмент программы:

int n_min = 0;

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

  if (a[i] < a[n_min])

    n_min = i;

13.2. Решение задач с использованием алгоритма поиска максимального (минимального) элементов

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

Этапы выполнения задания

I. Исходные данные: массив a — числа, являющиеся временем прохождения трассы, количество спортсменов — n.

II. Результат: a[n_min] — минимальное время, n_min — номер победителя.

III. Алгоритм решения задачи.

1. Ввод исходных данных.
2. 
Для решения задачи воспользуемся алгоритмом поиска минимального элемента в массиве и его номера (пример 13.4).
3. 
 Вывод результата. Номер лыжника на 1 больше номера элемента в массиве, поскольку элементы нумеруются с нуля.

IV. Описание переменных: n, n_min – int, а – vector <double>.

Пример 13.6. Определить, сколько раз в линейном массиве встречается элемент, равный минимальному.

Этапы выполнения задания

I. Исходные данные: массив а, количество чисел n.

II. Результат: a[n_min] — минимальный элемент, k — количество минимальных.

III. Алгоритм решения задачи.

1. Ввод исходных данных. 
2. Поиск минимального элемента. 
3. Линейный поиск элементов, равных минимальному. 
4. Вывод результата.

IV. Описание переменных: n, n_min, k — int, а – vector <int>.

Пример 13.7. Задан массив из слов. Найти в нем самое длинное и самое короткое слово.

Этапы выполнения задания

I. Исходные данные: массив а, количество cлов n.

II. Результат: a[n_min] — короткое слово, a[n_max] — длинное слово.

III. Алгоритм решения задачи.

1. Ввод исходных данных. 
2. Поиск самого короткого слова. Самое короткое слово — слово, в котором минимальное количество символов. Для его поиска можно воспользоваться алгоритмом поиска минимального элемента в массиве. Однако, если сравнивать сами элементы массива, то сравнение будет происходить не по длине [1]. Для сравнения строк по длине нужно использовать функцию для вычисления длины строки length
3. Для поиска самого длинного слова можно использовать алгоритм поиска максимального элемента и сравнивать элементы с использованием функции,  вычисляющей длину строки length
4. Вывод результата.

IV. Описание переменных: n, n_min, n_max – int, а – vector <string>.


[1] Сравнение строк осуществляется лексикографически: s1 < s2, если для первого несовпадающего символа с номером i верно, что s1[i] < s2[i], или все символы строк совпадают, но s1 короче s2.

Пример 13.5.

V. Программа:

#include <iostream>

#include <fstream>

#include <vector>

using namespace std;

int main()

{

  setlocale(0,«»);

  ifstream fin(«input.txt»);

  int n;

  fin >> n;

  vector <double> a(n);

  for (int i = 0; i < n; i++)

    fin >> a[i];

  //поиск минимального элемента

  int n_min = 0;

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

    if (a[i] < a[n_min])

      n_min = i;

  cout << «победительлыжник №»;

  cout << n_min + 1 << endl;

  cout << «его время — «<< a[n_min];

  cout << endl;

  return 0;

}

IV. Тестирование.

Пример 13.6.

V. Программа:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

  int n;

  cout << «n = «;

  cin >> n;

  vector <int> a(n);

  for (int i = 0; i < n; i++)

    cin >> a[i];

  //поиск минимального элемента

  int n_min = 0;

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

    if (a[i] < a[n_min])

      n_min = i;

  //подсчет количества

  int k = 0;

  for (int i = 0; i < n; i++)

    if (a[i] == a[n_min])

      k++;

  cout << «min = «<< a[n_min];

  cout << endl << «vstretilsja «;

  cout << k << » raz» << endl;

  return 0;

}

VI. Тестирование.

Пример 13.7.

V. Программа:

#include <iostream>

#include <vector>

#include <string>

using namespace std;

using namespace std::__cxx11;

int main()

{

  int n;

  cout << «n = «;

  cin >> n;

  vector <string> a(n);

  for (int i = 0; i < n; i++)

    cin >> a[i];

  //поиск минимального слова

  int n_min = 0;

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

    if (a[i].length() < a[n_min].length())

      n_min = i;

  //поиск максимального слова

  int n_max = 0;

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

    if (a[i].length() > a[n_max].length())

      n_max = i;

  cout << «min — «<< a[n_min];

  cout << «, max — «<< a[n_max];

  cout << endl;

  return 0;

}

VI. Тестирование.

Вопросы к параграфу

1. Какой элемент массива является максимальным? Какой минимальным?

2. Как найти максимальный элемент в массиве?

3. Как найти минимальный элемент?

4. Каким образом определить номер первого элемента, равного максимальному?

5. Как определить номер последнего элемента, равного минимальному?

Упражнения

    

1. Измените программы из примеров 13.1 и 13.2 так, чтобы находился минимальный элемент в массиве.

2. Для примера 13.5 выполните перечисленные задания.

1. Найдите номер спортсмена, пришедшего на финиш последним. 
2. Определите, был ли победитель единственным или есть еще лыжник, прошедший трассу с таким же результатом (см. пример 13.6). 
3. Добавьте еще один массив и введите в него фамилии спортсменов. Реализуйте пункты 1 и 2 так, чтобы выводилась фамилия, а не номер (см. пример 12.9).

3. Напишите программу, которая заменит в массиве нулями все элементы, равные минимальному.

4. Напишите программу, которая заменит в массиве нулями все элементы, стоящие перед максимальным. Предполагается, что в массиве единственный максимальный элемент.

5. Напишите программу, которая заменит нулями все элементы в массиве, стоящие после минимального. Если минимальных элементов несколько, то заменять нужно элементы, стоящие после последнего минимального.

6. Напишите программу, которая определит, какой из элементов — минимальный или максимальный — встречается в массиве раньше (имеет меньший индекс).

7. Напишите программу, которая определит, какой из элементов — минимальный или максимальный — встречается в массиве чаще.

8. Напишите программу, которая запишет в новый массив те элементы из исходного, которые расположены между минимальным или максимальным (по индексам).

9. В массиве хранится информация о стоимости автомобилей. Определите стоимость самого дорогого автомобиля и его номер в массиве. Если есть несколько таких автомобилей, то выведите все номера.

10. В массиве хранится информация о среднесуточной температуре декабря. Определите, сколько в декабре было дней с самой низкой и с самой высокой температурой.

11. Размеры n прямоугольников хранятся в двух массивах (длина и ширина). Найдите прямоугольник с минимальным периметром. (Вывести номер прямоугольника и значение периметра.)

12. Известны данные о массе (в кг) и объеме (в см3) n предметов, изготовленных из различных материалов. Найдите предметы с минимальной и максимальной плотностями. Вывести номер предмета и значение плотности.

13. Задан массив из слов. Найдите в нем самое длинное слово, заканчивающееся буквой «а».

14. Задан массив из слов. Найдите в нем самое короткое слово, начинающееся с заглавной буквы.

15. Задан массив из слов. Найдите в нем слово, в котором максимальное количество гласных букв. Если таких слов несколько, выведите все.

16. Задан массив из слов. Найдите в нем слово, в котором минимальное количество согласных букв. Если таких слов несколько, то выведите самое длинное из них.

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

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

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

textual

Листинг программы

var a:array[1..10] of integer;
    n,i,imn:integer;
begin
randomize;
n:=10;
writeln('Исходный массив');
imn:=1;
for i:=1 to n do
 begin
  a[i]:=random(10);
  if a[i]<=a[imn] then imn:=i;
  write(a[i]:3);
 end;
writeln;
writeln('Минимальный элемент=',a[imn],' его последний номер=',imn);
readln
end.

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

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

2.1. Поиск максимального (минимального) элемента в массиве

Очень часто для решения задачи требуется находить не заданный элемент массива, а максимальный (наибольший) или минимальный (наименьший).

Рассмотрим задачу нахождения максимального элемента. Если в массиве одинединственный элемент, то он и есть максимальный. Если элементов больше одного, то максимальным в массиве из i элементов является максимум из a[i] и максимального среди первых i1 элементов. Находить максимум будем последовательно, сравнивая текущий элемент с макси­мумом, найденным на предыдущем шаге. Если текущий элемент больше, то значение максимума, найденное на предыдущем шаге, нужно обновить (пример 6.1).

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

Будем использовать переменную n_max для хранения индекса макси­мального элемента. Значение пере­менной n_max будет изменяться тогда, когда изменяется значение макси­мального элемента (пример 6.2).

Если в массиве несколько элемен­тов имеют максимальное значение, то значением переменной n_max будет индекс первого из них. Если исполь­зовать условие a[i] I max, то перемен­ная n_max будет хранить индекс по­следнего из максимальных элементов.

В случае, когда известен индекс i элемента массива, значение элемента можно получить, обратившись к эле­менту по индексу: a[i]. Поэтому при поиске максимального элемента до­статочно хранить только его индекс n_max. Значение максимального эле­мента — a[n_max] (пример 6.3).

Для поиска минимального элемен­та необходимо заменить знак G в усло­вии оператора ветвления на знак < (пример 6.4).

2.1. Решение задач с использованием алгоритма поиска максимального (минимального) элемента

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

I. Исходные данные: массив а числа, являющиеся временем прохождения трассы, количество спортсменов — n.

II. Результат: a[n_min] — минимальное время, n_min — номер победителя.

III. Алгоритм решения задачи.

  1. Ввод исходных данных.
  2. Для решения задачи воспользуемся алгоритмом поиска минимального элемента в массиве и его номера (пример 6.4).
  3. Вывод результата.

IV. Описание переменных: а — array[1..20] of real; n, n_min — integer.

Пример 6.6. Определить, сколько раз в линейном массиве встречается элемент, равный минимальному.

I. Исходные данные: массив а, количество чисел n.

II. Результат: min — минимальный элемент, k — количество минимальных.

III. Алгоритм решения задачи.

  1. Ввод исходных данных.
  2. Поиск минимального элемента.
  3. Линейный поиск элементов, равных минимальному.
  4. Вывод результата.

IV. Описание переменных: а — array[1..20] of integer; n, min, k — integer.

Пример 6.7. Задан массив из слов различной длины. Найти в нем самое длинное и самое короткое слово.

I. Исходные данные: массив а, ко­личество слов n.

II. Результат: min_s — самое ко­роткое слово, max_s — самое длинное слово.

III. Алгоритм решения задачи.

  1. Ввод исходных данных.
  2. Поиск самого короткого сло­ва. Самое короткое слово — сло­во, в котором минимальное коли­чество символов. Для его поиска можно воспользоваться алгорит­мом поиска минимального элемен­та в массиве. Однако, если срав­нивать сами элементы массива, то сравнение будет происходить не по длине. Для сравнения строк по длине нужно использовать функ­цию вычисления длины строки length.
  3. Для поиска самого длинного слова можно использовать алго­ритм поиска максимального эле­мента и сравнивать элементы с использованием функции вычис­ления длины строки length.
  4. Вывод результата.

IV. Описание переменных: а — array[1..20] of string; n — integer; min_s, max_s: string;

2.1. Построение гистограммы (столбчатой диаграммы)

Пример 6.8. Дан одномерный массив из целых чисел. Построить гистограмму по числовым данным, хранящимся в массиве.

I. Исходные данные: массив а, количество чисел n.

II. Результат: построенная диаграмма.

III. Алгоритм решения задачи.

  1. Ввод исходных данных.
  2. Гистограмма состоит из n прямоугольников одинаковой ширины. Элементы массива определяют высоту соответствующего прямоугольника. Максимальное значение элементов массива (переменная max) должно по высоте поместиться в окне (WindowHeight). штабный коэффициент). Тогда значению элемента массива a[i] будет соответствовать целая часть от величины a[i] * m.
  3. Находим максимальный элемент массива.
  4. В цикле строим прямоугольники. Все прямоугольники имеют одинаковую ширину (h), расстояние между ними можно определить равным ширине прямоугольника. Тогда ширина прямоугольника — целая часть от деления ширины окна на (2n+1):
  5. При вычислении высоты пря­моугольника нужно учесть то, что ось Y направлена сверху вниз.
  6. Цвет прямоугольника будем задавать случайным образом.
  7. Местоположение прямоуголь­ника определяется переменной x. Начальное значение x = h. Новое значение получается из предыду­щего увеличением на 2*h.
  8. Вывод результата.

IV. Описание переменных: а — array[1..20] of integer; n, max, h, x, y1, y2 — integer; m: real.

Пример 6.1.
V. Программа:

var a: array[1..20] of integer;
n, max: integer;
begin
write(ꞌКоличество n = ꞌ);
readln(n);
writeln(ꞌЭлементы массиваꞌ);
for var i := 1 to n do
read(a[i]);
max := a[1];
for var i := 2 to n do if a[i] > max then max := a[i];
writeln(ꞌМаксимум = ꞌ, max);
end.

VI. Тестирование.

Пример 6.2.
V. Программа:

var a: array[1..20] of integer;
 n, max, n_max: integer;
begin
write ('Количество n = ');
 readln(n);
writeln('Элементы массива'); 
for var i := 1 to n do read(a[i]);
max := a[1]; 
n_max := 1;
for var i := 2 to n do
if a[i] > max then
 begin
max := a[i]; 
n_max :=i; 
end;
writeln('Максимум = ', max); writeln('Ero место ', n_max); 
end.

VI. Тестирование.

Пример 6.3. Фрагмент программы:

 n_max := 1;
for var i := 2 to n do
if a[i] > a[n_max] then n_max := i;
writeln( 'Максимум = ',a[n_max]); 
writeln('Ero место ', n_max);

Пример 6.4. Фрагмент программы:

n_min := 1;
for var i := 2 to n do
if a[i] < a[n_min] then
n_min := i;

Пример 6.5.
V.  Программа:

var a: array [1..20] of real;
       n, n_min: integer;
begin
writeln( 'Количество спортсменов') ;
readln(n);
 writeln( 'Время');
for var i := 1 to n do
read(a[i]);
//поиск минимального элемента
n_min := 1;
for var i := 2 to n do
if a[i] < a[n_min] then  n_min := i;
writeln('Победитель — лыжник номер ', n_min) ;
writeln('Его время - ', a[n_min]);
end.

VI. Тестирование.

Пример 6.6.
V. Программа:

var a: array [1..20] of integer;
       n, min, k : integer;
begin
write ('Количество n = ');
readln(n);
writeln ('Числа');
for var i := 1 to n do
read(a[i]);
//поиск минимального элемента
min := a[1];
for var i := 2 to n do if a[i] < min then min := a[i];
//подсчет количества
k := 0;
for var i := 1 to n do
if a[i] = min then k := k + 1;
writeln('Минимальный ', min);
writeln('Встретился ',k,' раз (-а)');
end.

VI. Тестирование.

Пример 6.7.
V. Программа:

var a: array [1..20] of string; 
n: integer;
min_s, max_s: string;
begin
write ('Количество n = '); 
readln(n); 
writeln('Слова');
for var i := 1 to n do readln(a[i]);
//поиск короткого слова 
min_s := a[1];
for var i := 2 to n do if length(a[i]) < length(min_s) then min_s := a[i];
//поиск длинного слова
max_s := a[1];
for var i := 2 to n do if length(a[i]) > length(max_s) then max_s := a[i];
writeln('Короткое - ',min_s);
 writeln('Длинное - ',max_s); 
end.

VI.   Тестирование.

Пример 6.8.

V. Программа:

uses graphABC;
var a: array[1..20] of integer;
n, max, h, x, y1, y2: integer;
m: real;
begin
write ('Количество n = ');
readln(n);
writeln(n);
writeln('Элементы массива');
for var i := 1 to n do
begin
read(a[i]);
write (a[i],'  ');
end;
max := a[1];
for var i := 2 to n do
if a[i] > max then
max := a[i];
h := trunc(WindowWidth/(2*n+1));
m := WindowHeight/max;
x := h;
for var i := 1 to n do
begin
SetBrushColor(clrandom);
y1 := WindowHeight;
y2 := y1 - trunc(a[i]*m);
Rectangle(x, y1, x+h, y2);
x := x + 2*h;
end;

VI. Тестирование.

VII. Постройте по этим данным диа­грамму в Excel и сравните.

1. Измените программы примеров 6.1 и 6.2 так, чтобы находился минимальный эле-
мент в массиве.
2. Для примера 6.5 выполните перечисленные задания.

3. В массиве хранится информация о стоимости автомобилей. Определите стоимость самого дорогого автомобиля и его номер в массиве. Если есть несколько таких автомобилей, то выведите все номера.

4. В массиве хранится информация о среднедневной температуре декабря. Определите, сколько в декабре было дней с самой низкой и с самой высокой температурой.

5. Задан массив из слов. Найдите в нем самое длинное слово, заканчивающееся буквой а.

6.* Задан массив из слов. Найдите в нем самое короткое слово, начинающееся с прописной буквы.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти факториал в питоне через for
  • Как исправить чтобы не выпирала грудная клетка
  • Как исправить кракозябру в тексте
  • Как найти периметр квадрата вписанного в треугольник
  • Darksiders 2 найти вечный трон как

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии