комбинация единиц
От: i.dmitry  
Дата: 28.04.11 17:44
Оценка:
уже 2 часа ломаю голову, никаких мыслей не приходит. а задачка вроде детская.
помогите плиз.

дано:
#define N 3
#define M 7 //2^3-1
#define LEN 16

int pos_arr[N]={1,5,7}; //позиции где должна быть единица. пусть будут для примера 1.5.7
int arr[M][LEN];


надо:
составить (2^N-1) LEN-разрядных векторов, у которых на позициях, номера которых, хранятся в массиве pos_arr — были комбинации единиц.
в данном конкретном случае

0100000000000000
0000010000000000
0000000100000000
0100010100000000
0100010000000000
0100000100000000
0000010100000000
Re: комбинация единиц
От: andy1618 Россия  
Дата: 28.04.11 17:55
Оценка: 1 (1)
Здравствуйте, i.dmitry, Вы писали:

ID>уже 2 часа ломаю голову, никаких мыслей не приходит. а задачка вроде детская.


ID>0100000000000000

ID>0000010000000000
ID>0000000100000000
ID>0100010100000000
ID>0100010000000000
ID>0100000100000000
ID>0000010100000000


Hint: можно пересортировать немного, и добавить нулевой вектор, будет понятнее:
0000000000000000
0000000100000000
0000010000000000
0000010100000000
0100000000000000
0100000100000000
0100010000000000
0100010100000000


Ничего не напоминает?
Re[2]: комбинация единиц
От: i.dmitry  
Дата: 28.04.11 19:37
Оценка:
Здравствуйте, andy1618, Вы писали:

A>Здравствуйте, i.dmitry, Вы писали:


ID>>уже 2 часа ломаю голову, никаких мыслей не приходит. а задачка вроде детская.


ID>>0100000000000000

ID>>0000010000000000
ID>>0000000100000000
ID>>0100010100000000
ID>>0100010000000000
ID>>0100000100000000
ID>>0000010100000000


A>Hint: можно пересортировать немного, и добавить нулевой вектор, будет понятнее:

A>0000000000000000
A>0000000100000000
A>0000010000000000
A>0000010100000000
A>0100000000000000
A>0100000100000000
A>0100010000000000
A>0100010100000000


A>Ничего не напоминает?

спасибо. очень грубо напоминает "двоичное" представление от 0x0 до 0x7
Re[3]: комбинация единиц
От: Аноним  
Дата: 28.04.11 20:01
Оценка:
A>>Ничего не напоминает?
ID>спасибо. очень грубо напоминает "двоичное" представление от 0x0 до 0x7

Ну да. вот не очень красивое решение: счетчик N бит -> битовое представление ->далее например 101 -> {1,0,1}X{1,5,7} -> 1* (1<<1)+ 0*(1<<5)+ 1* (1<<7).


Как-то это более громоздко чем хочется.Наверно есть какое-то более красивое решение ( чтоб все битовые операции одной двумя командами сделать)
Re[4]: комбинация единиц
От: MBo  
Дата: 29.04.11 05:38
Оценка: 6 (1)
Здравствуйте, Аноним, Вы писали:

А>Как-то это более громоздко чем хочется.Наверно есть какое-то более красивое решение ( чтоб все битовые операции одной двумя командами сделать)



var
  Mask, Subset: Integer;
begin
  Mask := 2 + 32 + 128;
  Subset:= 0;
  repeat
    Subset := (Subset - 1) and Mask; //на первом шаге Subset - 1 = 0xFFFFFFFF
    Memo1.Lines.Add(IntToStr(Subset));
  until Subset = 0;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.