![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите с написанием алгоритма [D7, WinXP]
van1tas © (2005-07-26 19:51:00)у меня уже мозги кипят. не работают к концу рабочего дня.
задача такова. есть у меня произвольное кол-во элементов массива, задаваемых пользователем (динамический массив, со string), содержащих разные строковые значения:
a[1] := 'qwegd';
a[2] := 'opat'
a[3] := 'hijm'
a[4] := 'zx';
...
и т.д.
....
сами наполненители массива, элементы внутри, тоже не известны, т.е. элементы могут содержать хоть: "x" или же "mnb", "qwertyuio" и т.д., заранее не известно.
а задача какова, необходимо сгенерировать максимальное колическтов уникальных сочетаний всех символов во всём массиве. т.е. допустим у меня в массиве три элемента: "a", "qw", "rt" и необходимо составить максимальное кол-во возможных сочетаний этих букв, пример: "aqr", "aqt", "awr", "awt".. только вот в большом массиве, вообще голова трещит. спасайте!
Джо (2005-07-26 20:42:00) [1]См. ветку
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1121894484&n=0
там, если не ошибаюсь, это обсудили со всех сторон.
van1tas (2005-07-26 20:41:00) [2]спасибо огромное!!, но у меня опять таки проблема, с перестановкой символов. хотя щас буду копаться, буду пробовать. если не сложно и к этому можно простейший пример.
Джо (2005-07-26 20:14:00) [3]
> а то я не понял по поводу первого пункта.
Ну, вот простейший класс, выполняющий "в лоб" эту задачу.
type
TWordList = class (TStringList)
public
function GetUniqueChars: string;
end;
implementation
function TWordList.GetUniqueChars: string;
var
I,J: Integer;
S: string;
Ch: Char;
begin
Result := '';
for I := 0 to Count-1 do
begin
S := Strings[I];
for J := 1 to Length(S) do
begin
Ch := S[J];
if Pos (Ch,Result) = 0 then
Result := Result + Ch
end;
end;
end;
А вот так его использовать:
procedure TForm1.Button1Click(Sender: TObject);
var
List: TWordList;
begin
List := TWordList.Create;
try
List.Add('qwer');
List.Add('aawe');
List.Add('roop');
....
// показываем строку, состоящую из уникальных символов,
// взятых из содержимого списка
ShowMessage ( List.GetUniqueChars);
finally
List.Free;
end;
end;
Ну, а перестановку этих символов, надеюсь, сможешь и сам сделать.
van1tas (2005-07-26 20:03:00) [4]это кончно хорошо, но у меня даже на такое сейчас мозг не способен.. может можно с примером, а то я не понял по поводу первого пункта.
не врублюсь я просто, может я в мозгу и могу так всё прикинуть, но вот наприсать не могу, поймите меня, просто не получается, я уже просто забился со всем этим.
покажите реализацию алгоритма...
Джо (2005-07-26 20:01:00) [5]Шаг первый: пройдись по всем элементам массива (или списка) и выбери из них уникальные символы. Запиши их в строку.
Шаг второй: из символов этой строки составь все возможные сочетания.
Вот, собственно, и весь "алгоритм".