§ 13. Максімальны і мінімальны элементы масіву

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. Тэсціраванне.