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

Вниз

перебор возможных вариантов   Найти похожие ветки 

 
bagos   (2011-01-17 08:48) [0]

требуется получить массив всех возможных вариантов из n элементов.
входные данные например 0 0 0
нужно получить
000
001
010
011
100
101
110
111
в какую сторону копать?
Заранее спасибо, думаю на эту тему должна быть матчасть, может уже кто реализовывал подобное чтобы велосипед не изобретать?


 
MBo ©   (2011-01-17 09:04) [1]

приведенный пример - битовое представление чисел от 0 до 7 (в общем случае до 2^n - 1)


 
И. Павел ©   (2011-01-17 10:23) [2]

Если задача учебная, то лучше написать этот велосипед еще раз.
суть простая: сначала у вас имеется 000. На каждом следующем шаге идете справа налево по массиву. Если встретили нулевой элемент, то заменяете его единицей, а все элементы справа обнуляете и переходите к следующему шагу. Волт и все.


 
KSergey ©   (2011-01-17 10:35) [3]

> требуется получить массив всех возможных вариантов из n элементов.

А почему элементы только 0 и 1 принимают значения?


 
bagos   (2011-01-17 10:39) [4]

спасибо за ответы, И. Павел, не учебная.
Есть около 10 параметров, каждый из которых может быть либо false либо true, собственно нужно -1 и 0, хочу посмотреть как будут изменяться выходные данные, для всех возможных вариантов заданных 10 параметров


 
bagos   (2011-01-17 10:40) [5]

И. Павел, по первости тоже такая идея пришла, тупо брать по массиву пройтись, но хотелось бы более элегантное решение, если оно конечно возможно


 
Сергей М. ©   (2011-01-17 10:46) [6]

> для всех возможных вариантов заданных 10 параметров
> хотелось бы более элегантное решение

for i := 0 to 1023 do.. // в i - очередная комбинация битовых значений  из всех 2^10 возможных

Куда уж элегантнее)


 
Dennis I. Komarov ©   (2011-01-17 11:01) [7]


> Куда уж элегантнее)

for i := 0 to $3FF do..
Вот так ;)


 
И. Павел ©   (2011-01-17 11:18) [8]

> но хотелось бы более элегантное решение

Ну тогда просто проходите все числа от 0 до 2 в степени n - 1 (как уже написали) и в цикле вычленяйте разряды через mod 2:

procedure TForm1.Button1Click(Sender: TObject);
var i, j, chislo: integer;
   stroka: string;
begin
 for i := 0 to 15 do
 begin
   stroka := "";
   chislo := i;
   for j := 1 to 4 do
   begin
     stroka := stroka + IntToStr(chislo mod 2);
     chislo := chislo div 2;
   end;
   Memo1.Lines.Add(stroka);
 end;
end;


 
bagos   (2011-01-17 11:30) [9]

спасибо, ваше решение красивее моего

 k,i,j:integer;
 mass:array of integer;
 n:integer;
 s:string;
begin
 n := 4;
 setlength(mass,n);
 for i:=0 to n-1 do
   mass[i] := 0;
for j:=0 to (n-1)*n+2 do
begin
 s := "";
 for i:=n-1 downto 0 do
   if mass[i] = 0 then
   begin
     mass[i] := 1;
     for k:=i+1 to n-1 do
       mass[k] :=  0;
     for k:=0 to n-1 do
       s := s + inttostr(mass[k]);
     memo2.Lines.Add(s);
     break;
   end;
end;


 
bagos   (2011-01-17 11:34) [10]

вот конечный под мою задачу, с boolean
var
 k,i,j:integer;
 mass:array of boolean;
 n:integer;
 s:string;
begin
 n := 3;
 setlength(mass,n);
 for i:=0 to n-1 do
   mass[i] := false;
for j:=0 to (n-1)*n+2 do
begin
 s := "";
 for i:=n-1 downto 0 do
   if not mass[i] then
   begin
     mass[i] := true;
     for k:=i+1 to n-1 do
       mass[k] :=  false;
     for k:=0 to n-1 do
       s := s + BoolToStr(mass[k]);
     memo2.Lines.Add(s);
     break;
   end;
end;

Всех благодарю, за советы и комментарии, помогли мне!


 
Dennis I. Komarov ©   (2011-01-17 11:50) [11]


> Ну тогда просто проходите все числа от 0 до 2 в степени
> n - 1 (как уже написали) и в цикле вычленяйте разряды через
> mod 2:

Ну не знаю, что там скажет оптимизатор, но решение (X shr N) and $1 мне кажется и нагляднее, и элегантнее



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1295345106
Novi4ok1992
2011-01-18 13:05
2011.04.17
Ошибки отладки Дельфи 7


15-1292587835
Правильный$Вася
2010-12-17 15:10
2011.04.17
замена имени видюхи


15-1293744604
Юрий
2010-12-31 00:30
2011.04.17
С днем рождения ! 31 декабря 2010 пятница


15-1294132538
dimonch-ik
2011-01-04 12:15
2011.04.17
траектория


2-1295026576
Тоха
2011-01-14 20:36
2011.04.17
Трудности с WMI (инфо о процессах)