#include <iostream>
#include <vector>
#include <cmath>
#include <set>
using namespace std;
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
signed main() {
set<pair<int,int>> s;
int n;
cin >> n;
vector<int> a(n);
for(int &i:a)
cin >> i;
int m;
cin >> m;
while(m--){
int x,y;
cin >> x >> y;
s.insert({x,y});
s.insert({y,x});
}
for(int i = 0; i < n; i++)
for(int j = 0; j < n - i - 1; j++)
if(a[j] > a[j+1] && s.find({a[j],a[j+1]}) == s.end())
swap(a[j],a[j+1]);
for(int &i:a)
cout << i << " ";
}
ответ: Повторять пункты 4, 5 ,6 до тех пор пока не будут выполнены все задания ко всем урокам.
Объяснение: Суть циклических алгоритмов в том, чтобы повторять действие, пока какое-то условие не будет выполнено, при этом повторяющиеся действия должны быть направлены на выполнение условия.
Нужно ли нам повторять действие "Сесть за стол."? - нет, потому что это нужно выполнить всего лишь единожды.
Нужно ли нам бесконечно доставать учебные принадлежности? - нет.
Что нам нужно будет делать каждый раз это читать задание к очередному уроку и подготавливать по нему устную часть и письменную часть, поскольку эти задания необходимо выполнять по-кругу, пока "не будут выполнены все задания ко всем урокам".
Единственное что - поскольку цикл абстрактный, то можно спорно говорить про разные его пункты. К примеру, под пунктом 2 могут иметься именно учебные принадлежности определённого предмета, в этом случае нам надо будет повторять это действие, потому что нам нужен всегда учебник самого предмета. Похожая ситуация с пунктом, если, к примеру, нам необходимо каждый раз смотреть расписание и брать следующий предмет из него для выполнения (к примеру мы не можем их всех запомнить посмотрев единожды).
Надеюсь это даст общее представление о том, для чего и как работают алгоритмы и почему именно эти пункты выбраны.