Для школьного праздника группа учащихся решила поставить танец, в котором иллюстрировалась бы работа алгоритма сортировки пузырьком. В этом танце учащиеся становятся в одну линию, после этого некоторые стоящие рядом танцоры могут меняться местами. Одновременные обмены запрещены, то есть пока одна пара танцоров меняется местами, другие остаются на своих местах. В конце танца все девочки должны стоять в ряду слева, а все мальчики — справа. По данному первоначальному расположению мальчиков и девочек в ряду определите, какое минимальное число обменов им необходимо совершить, чтобы встать нужным образом.
Например, пусть первоначальная расстановка танцоров такая (буква «Д» обозначает девочку, буква «М» обозначает мальчика):
МДДМД
Тогда им необходимо выполнить 4 обмена. Запишем расстановку после каждого обмена, выделив жирным шрифтом пару, которая поменялась местами.
ДМДМД
ДМДДМ
ДДМДМ
ДДДММ
В этой задаче вам необходимо определить минимальное число обменов для следующих пяти первоначальных расстановок:
МДММДМД
Во второй расстановке сначала стоит 7 мальчиков, потом 8 девочек.
В третьей расстановке стоит 10 мальчиков, 10 девочек, 10 мальчиков, 10 девочек, 10 мальчиков, 10 девочек. Всего 60 танцоров.
В четвёртой расстановке 1 мальчик, 1 девочка, 2 мальчика, 2 девочки, 3 мальчика, 3 девочки, 4 мальчика, 4 девочки, 5 мальчиков, 5 девочек, 6 мальчиков, 6 девочек. Всего 42 танцора.
В пятой расстановке мальчики и девочки чередуются, всего 80 танцоров.
ответом на эту задачу является пять целых чисел, записанных в пяти отдельных строках, по одному числу в строке. ответы на расстановки должны быть записаны в том же порядке, в котором они приведены в условии. Если вы не можете найти ответ для какой-то расстановки, напишите в качестве ответа любое число.
#include <iostream>
using namespace std;
int main() {
int a[100], n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
//сюда код свой
int min_elem_ind = 0;
int min_elem_val = a[0];
for (int i = 1; i < n; i++) {
if (min_elem_val > a[i]) {
min_elem_val = a[i];
min_elem_ind = i;
}
}
int max_elem_ind = 0;
int max_elem_val = a[0];
for (int i = 1; i < n; i++) {
if (max_elem_val < a[i]) {
max_elem_val = a[i];
max_elem_ind = i;
}
}
if (max_elem_ind > min_elem_ind) {
cout << "Min" << endl;
}
if (max_elem_ind < min_elem_ind) {
cout << "Max" << endl;
}
else {
cout << "Error" << endl;
}
return 0;
}
Здесь ничего не написано про случай, если максимум = минимуму, поэтому его не учитываем.
Идея программы: просто ищем индекс первого максимального и первого минимального, а затем сравниваем их
Фрагмент кода:
int max = a[0], min = a[0];
int i_max = 0, i_min = 0;
for (int i = 1; i < n; i++) {
if (a[i] > max) {
max = a[i];
i_max = i;
}
if (a[i] < min) {
min = a[i];
i_min = min;
}
}
if (i_max > i_min)
cout << "MAX";
else if (i_min > i_max)
cout << "MIN";