Как упростить цикл комбинаторики?

 

Помогите упростить пожалуйста

   int j[6];
   int is = 0;
   string str_comb;
   int d;
   int kn = 5;

   for(j[1] = 0; j[1] < 2; j[1]++)
     {
      for(j[2] = 0; j[2] < 2; j[2]++)
        {
         for(j[3] = 0; j[3] < 2; j[3]++)
           {
            for(j[4] = 0; j[4] < 2; j[4]++)
              {
               for(j[5] = 0; j[5] < 2; j[5]++)
                 {
                  is++;
                  str_comb = "";
                  for(d = 1; d <= kn; d++)
                    {
                     str_comb += string(j[d]);
                    }
                  Print(is,"   ",str_comb);
                 }
              }
           }
        }
     }
 
erdeli:

Помогите упростить пожалуйста

Есть подозрение, что кто-то не хочет учиться.
Подсказка: смотрите в сторону двоичной системы счисления.
 
Aliaksandr Hryshyn:
Есть подозрение, что кто-то не хочет учиться.
Подсказка: смотрите в сторону двоичной системы счисления.

Я понимаю,что это может выглядеть примерно так

   for(a = 1; a <= kn; a++)
     {
      for(b = 1; b <= a; b++)
        {
         for(j[b] = 0; j[b] < 2; j[b]++)
           {
            is++;
            str_comb = "";
            for(d = 1; d <= kn; d++)
              {
               str_comb += string(j[d]);
              }
            Print(is,"   ",str_comb);
           }
        }
     }

Но,увы для меня не всё так просто..Два дня мучаюсь...

 
erdeli:

Я понимаю,что это может выглядеть примерно так

Но,увы для меня не всё так просто..Два дня мучаюсь...

возможно имеет смысл максимально точно описать задачу.

Навскидку можно сделать через функцию, уменьшиться ко-во циклов(вернее строк кода, кол-во итераций само собой не уменьшатся). 

 

Посмотрите на циклы, на результат, тут простое решение.

Внешние 5 циклов переходят в один.

 
int a=0;
while(a<B'100000') _Print(a++);

void _Print(int a){
   int start=0x10;
   string text=!(a&start)?"0":"1";
   while((start>>=1)>0) text+=!(a&start)?"0":"1";
   Print(text);}
 
erdeli:

Помогите упростить пожалуйста

Из социализма: Приходит мужик на завод: я глюкальщик 7 разряда. Да, нам очень нужны глюкальщики. Работает месяц - готово глюкало. Лист железа с дырками. В воду опускаешь, оно - "глюк, глюк, глюк...

 
void OnStart()
{
   uint x = 0;
   while(x < 128)
      Print(DecToBin(x++));
}
//+------------------------------------------------------------------+
string DecToBin(uint value)
{
   string result = "";
   for(int i = 0; i < 32; i++) {
      result = (string)(value & 1) + result;
      value = value >> 1;
   }
   return(result);
}
//+------------------------------------------------------------------+
 
Vladimir Simakov:

Немного замудрёно, но ответ правильны).

 

Можно на этот счет конкурс организовать:  "Кто лучше ?"

Кто следующий :)

 
void OnStart(){
   z("",5);
}

void z(string s,int n){   
   if(n==0){
      Print(s);
      return;
   }
   z(s+"0",n-1);
   z(s+"1",n-1);
}
Причина обращения: