Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.21;
Скачать: CL | DM;

Вниз

Как сделать выборку всех вариантов из списка из M элементов?   Найти похожие ветки 

 
BetMaster   (2003-04-08 08:09) [0]

Как сделать выборку всех вариантов из N элементов из списка состоящего из М элементов?
Например
Есть список чисел 1,2,3,4
Надо выбрать из него по 2 элемента
то есть 12,13,14,23,24,34.
Подскажите пожалуйста.


 
MBo ©   (2003-04-08 08:11) [1]

два вложенных цикла.


 
BetMaster   (2003-04-08 08:19) [2]

Я так делал
но почему-то не получилось на больших значениях
например из 20 по 7


 
MBo ©   (2003-04-08 08:22) [3]

это просто очень долго - много вариантов.
два вложенных цикла - это для выборки по 2 элемента, в общем случае - рекурсия.


 
BetMaster   (2003-04-08 08:28) [4]

пожалуйста, если не трудно
набрасай примерно код
а то когда я через рекурсию пробовал у меня всё время какая-то ошибка вылетает


 
MBo ©   (2003-04-08 08:30) [5]

Я считаю, что такие вещи надо делать самостоятельно.


 
Johnmen ©   (2003-04-08 09:43) [6]

>MBo © (08.04.03 08:30)

Верно подмечено !

Еще скажу, что можно без рекурсии...


 
BetMaster   (2003-04-08 10:08) [7]

Johnmen
Как,если не секрет?

Вот пример выбора по 3

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
res:string;
begin
for i:=0 to memo1.Lines.Count-1 do
for j:=i+1 to memo1.Lines.Count-1 do
for k:=j+1 to memo1.Lines.Count-1 do
begin
res:=(memo1.Lines.Strings[i]+" "+memo1.Lines.Strings[j]+" "+memo1.Lines.Strings[k]);
memo2.Lines.add(res);
end;
end;

Может мне всё таки кто-нить скажет как сделать для любого количечтва через рекурсию
ну или без ней


 
MBo ©   (2003-04-08 10:16) [8]

только hint - ни к чему постоянно обращаться к свойствам Memo.
Держи все в переменных.


 
BetMaster   (2003-04-08 10:44) [9]

но мне надо вводить различные слова в качестве членов списка а потом куда-то выводить варианты выборки

и кстати то что я пытался сделать вчера вообще не рекурсия а хз.
щас нашёл что такое рекурсия, и как сделать это с её помощью не догоняю


 
Cobalt ©   (2003-04-09 00:52) [10]

Подсказка - попробуй рассказать последовтельность действий так, как будто это ты сам проходишь по списку, и выбираешь. Очень помогает понять, как строить алгоритм. Например:
берем 1-ый элемент,
прибавляем к нему 2-й
готово - 2 элемента.
прибавляем к 1-му 3-ий - готова вторая комбинация
прибавляем к 1-му 4-ий - готова третья комбинация
....
(в общем случае - прибавляем к нему очередной, +очередной +... до тех пор, пока не наберется нужное количество символов)


 
Спрашивающий   (2003-04-09 03:28) [11]

Согласен с MBo © решение таких простых
задач нужно искать самому
Просто было время набрасал за 2 минуты, думаю багов нет
(не проверял.)
procedure TForm1.Button1Click(Sender: TObject);
var
S:String;
J:Integer;
begin
S:=Edit1.Text;
repeat
For J:=2 To Length(S)Do
Memo1.Lines.Add(S[1]+S[J]);
Delete(S,1,1);

until Length(S)=1;

end;


 
BetMaster   (2003-04-09 07:38) [12]

Cobalt
да я это понял и написал код для этого выше
проблема в том что при таком варианте по сколько выбирать задаётся в design-time
а мне нужно чтобы я мог в режиме run-time указать по сколько выбирать(например введя число выборки в поле Edit)

Спрашивающий
то что ты написал работает только для выборки по 2
как и в том коде что я привёл выше(тока там по 3)
проблема в том что для изменения степени выборки приходиться в код добавлять новую переменную и цикл.

All
Ну скажите кто-нибудь как это через рекурсию сделать.


 
Cobalt ©   (2003-04-09 10:21) [13]

2 BetMaster
Так в том-то и заключается вся суть работы программиста - самому найти решение(тем более, алгоритмическое), хотя бы по аналогии...

(в общем случае - прибавляем к нему очередной, +очередной +... до тех пор, пока не наберется нужное количество символов) - это и есть рекурсия (очередной ты получаешь вызывая ту же функцию, но с несколько другими параметрами. А еще вероятнее, лучше будет хранить в глобальной переменной, или передавать в параметрах новой функции "предыдущую строку" - это проще, легче и удобней.)



Страницы: 1 вся ветка

Текущий архив: 2003.04.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
4-67626
Dmitryy
2003-02-21 11:23
2003.04.21
Как узнать полный путь к файлу процесса зная его ID в XP?


4-67610
MC.Daemon
2003-02-20 16:16
2003.04.21
Активизация процесса:


1-67198
tytus
2003-04-10 13:13
2003.04.21
Темы ХР


14-67465
Карлсон
2003-04-04 19:48
2003.04.21
напиться, обкуриться, забыться.


3-67092
Stas
2003-04-02 12:34
2003.04.21
Не допустимая закладка