Добрый всем вечер! Есть интересная мысль, но не получается один алгоритм, прошу помощи. Задача такая: есть некоторый словарь A=['a','s','d','f','g','h''j','k','l',';'] - это массив любой длинны (длина массива L) и любого содержания, есть комбинация из N элементов этого массива. и того у нас есть N^L комбинаций если длина комбинации, например, 2 то: Code: aa as ad af ag ah aj ak al a; sa ss sd sf ..... И нужно по номеру комбинации (например 15) найти саму комбинацию. Для такого числа это на глаз понятно, но речь идёт о дине комбинации > 20, а массива A > 40. Нужна формула...
cheater_man, =) к сожалению, что-бы начинать писать данный код мне нужна формула. без неё вся идея коту под хвост. прям загадка - второй день голову ломаю.
Типо этого что-ли? яп С#.net Code: using System; using System.Collections.Generic; using System.Text; namespace brute1 { class Program { public char[] mass ={'a','b','c','d' }; static void Main(string[] args) { Program pr = new Program(); for (int i = 0; i<pr.mass.Length; i++) { for (int j = 0; j <pr.mass.Length; j++) { Console.WriteLine("->" + pr.mass[i] + pr.mass[j]); } } Console.ReadLine(); } } }
C# Code: ... Dictionary<int, string> myDict = new Dictionary<int, string>(); ... myDict.add(1,"Первый"); myDict.add(2,"Второй"); ... myDict.add(100,"Сотый"); ... Console.WriteLine(myDict[3]); Выведет на консоль "Третий".
cheater_man, 0kt0ber, вы хотите все возможные комбинации сначала сгенерировать и пронумеровать, чтобы потом получить нужную комбинацию по номеру? )
нет нумеровать не обязательно, если через ArrayList делать, он сам пронумерует.Просто генерим комбинацию и записываем в массив
а есть какаято проблема привести формулу теорвера к алгоритму? зы мысль твоя чето ассоциируется у меня с генерацией радуг для мд5 хешей) но тут вопрос в ресурсах
Пример реализации на билдере (на форму кидаем 3 едита и баттон): PHP: //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList* lst = new TStringList; lst->CommaText = Edit1->Text; // записываем словарь в стринглист unsigned int iBase = lst->Count; // основание системы счисления unsigned int iNum = Edit2->Text.ToInt(); // число, которое надо преобразовать unsigned int iLen = Edit3->Text.ToInt(); // длина комбинации String sRes = ""; // результат --iNum; // так, как комбинации начинаются с 0 (кобминация состоящая из первого символ словаря), уменьшаем число на 1 // преобразование числа в систему счисления с основанием iBase while(iNum) { sRes.Insert(lst->Strings[iNum%iBase], 0); iNum /= iBase; } // дописываем нули(первый символ словаря), если длина результата меньше длины комбинации for(int i = sRes.Length(); i < iLen; ++i) sRes.Insert(lst->Strings[0], 0); lst->Clear(); delete lst; Edit4->Text = sRes; // выводим результат } //--------------------------------------------------------------------------- в Edit1 пишем элементы словаря через запятую - a,b,c,d,f,g..... (если в словаре есть запятая, то пишем ее в кавычках) Edit2 - номер комбинации Edit3 - длина комбинации Edit4 - результат
Тут все проблема в ресурсы упирается Ну тогда например генерируем например 20к записываем в файл. Темболее ему скорее всего для брута надо
Ты что думаешь , что он сгенерит эти 1,099511627776e+52, потом запишет в файл Да ну в файл то он запишет, вот только открывать придется на mainfram'е
ты вообще соображаешь что печатаешь? я тебя спрашиваю какой там ArrayList, в примере был использован Dictionary. >>Dictionary<int, string> myDict = new Dictionary<int, string>();
долбиться в другом месте будешь. ОЛОЛО. иди книжки читай. Разница как раз таки есть. ты вообще знаешь в чем различие Collection от GenericCollection ???? б**ть вы задолбали смешно вы**ываться
W!z@rD, какая разница какой контейнер использовать, все равно памяти не хватит, чтобы хранить все комбинации.