Мощнейшая рекурсия перемалывает всё на своём пути
void fantasy(std::string nabor, std::string bot, std::string mid,
std::string top)
{
std::ofstream stream;
if (bot.empty())
for(int i=0; i < nabor.size(); i++)
{
std::string newbot;
newbot.assign(nabor,i,1);
std::string newnabor(nabor);
newnabor.erase (i,1);
fantasy(newnabor, newbot, mid, top);
}
else if (mid.empty())
for(int i=0; i < nabor.size(); i++)
{
std::string newmid;
newmid.assign(nabor,i,1);
if(bot >= newmid)
{
std::string newnabor(nabor);
newnabor.erase (i,1);
fantasy(newnabor, bot, newmid, top);
}
}
else if (top.empty())
for(int i=0; i < nabor.size(); i++)
{
std::string newtop;
newtop.assign(nabor,i,1);
if(mid >= newtop)
{
std::string newnabor(nabor);
newnabor.erase (i,1);
fantasy(newnabor, bot, mid, newtop);
}
}
//походу всё собрали
if (!bot.empty() && !mid.empty() && !top.empty())
{
stream.open("fantasies.txt", std::ios::app);
if (stream.is_open())
{
stream << bot << mid << top << '\n'; //
stream.close();
}}
};
вызываем
std::string nabor = "ABCDABCD";
std::string bott = "";
std::string midd = "";
std::string topp = "";
fantasy( nabor, bott, midd, topp);
получаем
BAA
BAA
BBA
BBA
CAA
CBA
CBA
CBB
CAA
CBA
CBB
CBA
CCA
CCB
CCA
CCB
DAA
DBA
DBA
DBB
DCA
DCB
DCA
DCB
DCC
DAA
DBA
DBB
DBA
DCA
DCB
DCC
DCA
DCB
DDA
DDB
DDC
DDA
DDB
DDC
BAA
BBA
BBA
BAA
CAA
CBA
CBA
CBB
CCA
CCB
CCA
CCB
CAA
CBA
CBB
CBA
DAA
DBA
DBA
DBB
DCA
DCB
DCA
DCB
DCC
DDA
DDB
DDC
DDA
DDB
DDC
DAA
DBA
DBB
DBA
DCA
DCB
DCC
DCA
DCB
тут, как понятно, под ADCD зашифрованы различные по рангу комбинации. Дополнительной проверки внутри одного ранга нет.
Вообще, меня смущают результаты
Jak-а...какие-то мс на разложение 10к фантазий.
Хрен с ним, с нахождением комбинаций...даже разложение по старшинству не такое уж и быстрое...
Сейчас спать, с утра загоню в строку 500 "комбинаций" и сделаю цикл на 10к
Ваш прогноз на быстродействие?