Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1295283900
FIL23
2011-01-17 20:05
2011.04.17
Одна переменная на две формы


2-1295269594
Евгений07
2011-01-17 16:06
2011.04.17
дельфи игнорирует файл источник


15-1293566787
Сергей М.
2010-12-28 23:06
2011.04.17
Непонятка с принт-сервером DP-101P+


15-1293983270
Aleks
2011-01-02 18:47
2011.04.17
Сеть и базы данных


8-1211811559
Staska
2008-05-26 18:19
2011.04.17
разработка класса для изображения квадрата





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский