Просмотр полной версии : поиск значения по номеру
Добрый всем вечер!
Есть интересная мысль, но не получается один алгоритм, прошу помощи.
Задача такая:
есть некоторый словарь A=['a','s','d','f','g','h''j','k','l',';'] - это массив любой длинны (длина массива L) и любого содержания, есть комбинация из N элементов этого массива.
и того у нас есть N^L комбинаций
если длина комбинации, например, 2 то:
aa
as
ad
af
ag
ah
aj
ak
al
a;
sa
ss
sd
sf
.....
И нужно по номеру комбинации (например 15) найти саму комбинацию.
Для такого числа это на глаз понятно, но речь идёт о дине комбинации > 20, а массива A > 40.
Нужна формула...
cheater_man
06.04.2010, 21:09
Соурс давай, тут тебе не экстрасенсы :D
cheater_man, =) к сожалению, что-бы начинать писать данный код мне нужна формула. без неё вся идея коту под хвост. прям загадка - второй день голову ломаю.
M_script_
06.04.2010, 22:17
Byte_, все не так сложно как кажется
_http://ru.wikipedia.org/wiki/Позиционная_система_счисле ния
cheater_man
06.04.2010, 22:24
Типо этого что-ли?
яп С#.net
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#
...
Dictionary<int, string> myDict = new Dictionary<int, string>();
...
myDict.add(1,"Первый");
myDict.add(2,"Второй");
...
myDict.add(100,"Сотый");
...
Console.WriteLine(myDict[3]);
Выведет на консоль "Третий".
cheater_man
07.04.2010, 00:18
Да вот правильно говорит 0kt0ber ArrayList нужно создавать! С ним попроще будет ;)
M_script_
07.04.2010, 00:44
cheater_man, 0kt0ber, вы хотите все возможные комбинации сначала сгенерировать и пронумеровать, чтобы потом получить нужную комбинацию по номеру? )
cheater_man
07.04.2010, 00:52
cheater_man, 0kt0ber, вы хотите все возможные комбинации сначала сгенерировать и пронумеровать, чтобы потом получить нужную комбинацию по номеру? )
нет нумеровать не обязательно, если через ArrayList делать, он сам пронумерует.Просто генерим комбинацию и записываем в массив ;)
M_script_
07.04.2010, 01:17
Просто генерим комбинацию и записываем в массив ;)
речь идёт о дине комбинации > 20, а массива A > 40.
А ничего, что 20^40 == 1,099511627776e+52 ? :D
а есть какаято проблема привести формулу теорвера к алгоритму?
зы мысль твоя чето ассоциируется у меня с генерацией радуг для мд5 хешей) но тут вопрос в ресурсах
M_script_
07.04.2010, 01:55
Пример реализации на билдере (на форму кидаем 3 едита и баттон):
//---------------------------------------------------------------------------
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^40 == 1,099511627776e+52 ?
Во-во! =)
Пример реализации на билдере (на форму кидаем 3 едита и баттон)
M_script_, +
Большое спасибо! Дома проверю)))))
cheater_man
07.04.2010, 11:44
А ничего, что 20^40 == 1,099511627776e+52 ? :D
Тут все проблема в ресурсы упирается :)
Ну тогда например генерируем например 20к записываем в файл.
Темболее ему скорее всего для брута надо ;)
Да вот правильно говорит 0kt0ber ArrayList нужно создавать! С ним попроще будет ;)
какой в баню стремный ArrayList? там Dictionary если что.
cheater_man
07.04.2010, 12:04
какой в баню стремный ArrayList? там Dictionary если что.
Ты что думаешь , что он сгенерит эти 1,099511627776e+52, потом запишет в файл :D
Да ну в файл то он запишет, вот только открывать придется на mainfram'е :D
ты вообще соображаешь что печатаешь?
я тебя спрашиваю какой там ArrayList, в примере был использован Dictionary.
>>Dictionary<int, string> myDict = new Dictionary<int, string>();
cheater_man
07.04.2010, 13:05
ты вообще соображаешь что печатаешь?
я тебя спрашиваю какой там ArrayList, в примере был использован Dictionary.
>>Dictionary<int, string> myDict = new Dictionary<int, string>();
Да видел это, только вот я тебе пытаюсь вдолбить что тут без разницы что использовать.
долбиться в другом месте будешь.
ОЛОЛО.
иди книжки читай. Разница как раз таки есть.
ты вообще знаешь в чем различие Collection от GenericCollection ????
б**ть вы задолбали смешно вы**ываться
M_script_
07.04.2010, 17:47
W!z@rD, какая разница какой контейнер использовать, все равно памяти не хватит, чтобы хранить все комбинации.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot