#include <iostream> using namespace std; int main() { setlocale (0,""); int n1,n2,n3,p1,p2,p3; cout<<"введите количество учеников в каждом классе"<<endl; cout<<"1-"; cin>>n1; cout<<"2-"; cin>>n2; cout<<"3-"; cin>>n3; p1=n1/2; if (n1%2!=0) p1++; p2=n2/2; if (n2%2!=0) p2++; p3=n3/2; if (n3%2!=0) p3++; cout<<"для первого класса - "<<p1<<endl; cout<<"для второго класса - "<<p2<<endl; cout<<"для третьего класса - "<<p3<<endl; return 0; }
Учитывая, что 8 букв можно переставить примерно 40 тысячами можно просто запустить поиск в ширину, сохранить для всех перестановок то, из какой строчки они получились, и потом восстановить ответ для строчки abcdefgh.
while not to_process.empty(): s, prev = to_process.get() if s in prec: continue for i in range(7): for j in range(i + 1, 8): if i == 0: next_s = s[j::-1] + s[j+1:] else: next_s = s[:i] + s[j:i-1:-1] + s[j+1:] if next_s not in prec: to_process.put((next_s, s)) prec[s] = prev
current = "abcdefgh" print(current) while prec[current] is not None: current = prec[current] print(current)