Дан массив из N различных натуральных чисел от 1 до N. Сортировка массива по возрастанию «пузырьком» работает следующим образом. Сначала сравниваются первый и второй элемент, и, если первый больше второго, то они меняются местами. Затем та же процедура производится со вторым и третьим элементом, …, с предпоследним и последним. Затем эта процедура снова повторяется с первым и вторым, со вторым и третьим, …, с предпоследним и последним элементами. И так (N−1) раз.
Сортировка «с конфеткой» выполняется по тем же правилам, но дополнительно задан список пар чисел, которые не меняются друг с другом ни при каких условиях (в таком случае сортирующий получает конфетку за то, что пропускает соответствующий обмен). Например, наличие в списке пары (4,1) обозначает, что если в какой-то момент рядом окажутся числа 4 и 1, и по алгоритму сортировки их нужно будет поменять местами, то обмена не произойдет, а сортирующий получит конфетку.
Входные данные
4
1 4 2 3
2
4 3
1 2
Выходные данные
1 2 4 3
Другие языки программирования и технологии
Программирование задач на языке программирования C++.
Тут просто очень, надо сначала создать два массива (в моём случае, динамические), ввести данные, а потом проводить сортировку пузырьком, и если найдется элемент, который больше предыдущего, надо запустить третий вложенный цикл, и проверить, есть ли она в списке неизменяемых, а в зависимости от этого, надо его менять или нет. Вот код программы и вывод:
#include
using namespace std;
int main() {
int n, m;
cin >> n;
int *a = new int [n];
int *b = new int [m*2];
for (int i = 0; i < n; ++i)
cin >> a[i];
cin >> m;
for (int i = 0; i < m*2; ++i)
cin >> b[i];
for (int i = 1; i < n; ++i)
for (int j = 1; j <= n-i; ++j)
if (a[j-1] > a[j]) {
bool flag = true;
for (int k = 0; k < m*2; k += 2)
if ((a[j-1] == b[k] && a[j] == b[k+1]) || (a[j-1] == b[k+1] && a[j] == b[k]))
flag = false;
if (flag)
swap(a[j-1], a[j]);
}
for (int i = 0; i < n; ++i)
cout << a[i] << " ";
delete [] a;
delete [] b;
return 0;
}
PS: Ответы майл. ру не любят форматирование, поэтому, табуляцию расставь сам, подробнее на фото, также в первой строчке кода надо подключить модуль iostream ( он почему то не прогрузился на этом сайте)

#include
using namespace std;
int main() {
int n, m;
cin >> n;
int *a = new int [n];
int *b = new int [m*2];
for (int i = 0; i < n; ++i)
cin >> a[i];
cin >> m;
for (int i = 0; i < m*2; ++i)
cin >> b[i];
for (int i = 1; i < n; ++i)
for (int j = 1; j <= n-i; ++j)
if (a[j-1] > a[j]) {
bool flag = true;
for (int k = 0; k < m*2; k += 2)
if ((a[j-1] == b[k] && a[j] == b[k+1]) || (a[j-1] == b[k+1] && a[j] == b[k]))
flag = false;
if (flag)
swap(a[j-1], a[j]);
}
for (int i = 0; i < n; ++i)
cout << a[i] << " ";
delete [] a;
delete [] b;
return 0;
}
PS: Ответы майл. ру не любят форматирование, поэтому, табуляцию расставь сам, подробнее на фото, также в первой строчке кода надо подключить модуль iostream ( он почему то не прогрузился на этом сайте)

Добавляешь все пары в сет и затем делаешь обычный бабл сорт с проверкой есть ли нынешняя пара в сете, если да - не трогаем, если нет, то меняем при необходимости
Станислав Фёдоров
Сет плохо знаю. Если можно, то код
Похожие вопросы
- Я учусь в 5 классе и хочу научится языку программирования C++.
- Стоит ли изучать язык программирования C++ ?И какое преимущество этого языка? Где он мне пригодится ?
- Основные различия языка программирования C# от С++.
- Вопрос по языку программирования C# (СиШарп) (очень простой вопрос)
- Сложно ли будет изучить язык программирования C#?
- Почему язык программирования C++ считается одним из самых сложных языков программирования?
- Язык программирования C.
- Мальчики! Помогите пожалуйста с задачей на языке программирования C#
- Можно научиться языку программирования c++ в электонных книгах?
- Язык программирования C#