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

 
Petros Shatakhtsyan:

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

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

Я следующий. Я знаю ответ.

И циклов не надо.

 
Dmitry Fedoseev:
Прикольный вариант).
 
Aliaksandr Hryshyn:
Прикольный вариант).
is=32
 
Evgeny Belyaev:

Я следующий. Я знаю ответ.

И циклов не надо.

Лучше идите спать, уже поздно.

 
Petros Shatakhtsyan:

Лучше идите спать, уже поздно.

Хорошо. А какой ответ?

 
Evgeny Belyaev:

Хорошо. А какой ответ?

Какой ответ ?  Вот Fedoseev уже привел хороший пример.

Только надо автору темы предупредить, что и еще надо знать что такое рекурсия.

 
Petros Shatakhtsyan:

Какой ответ ?  Вот Fedoseev уже привел хороший пример.

Только надо автору темы предупредить, что и еще надо знать что такое рекурсия.

Короче загостился? Своего ответа нет?

 

стринги медленные. 
Думаю предпочтительнее дело иметь с массивом uchar.
Например так:

#define  size 5

void OnStart() {
   uchar s[size];
   for (ulong i=0,j=0; i<(1<<size); i++, j=i) {
      for(int k=size-1; k>=0; k--,j=j>>1) s[k]=(j&1)?'1':'0';
      Print(string(i) +" = " +CharArrayToString(s));
   }
}
Файлы:
binary.mq5  3 kb
 
Спасибо мужики!Буду примеры разбирать,понимать.
 
Evgeny Belyaev:

Короче загостился? Своего ответа нет?

У меня был такой вариант, но было поздно и не показал.

Такие вещи сделали очень давно, еще на EC-ЭВМ через PL/1


    int kn=5;
   for(int k=0; k<MathPow(2,kn); k++)
   {
     string str="";
     for (int i = kn-1; i >= 0; i--)
     {
         str+= ((1 << i) & k) ? "1" : "0";
     }
     Print(k, ": ",str);
   }


P.S.  Для новичков хочу добавить, что MathPow и объявление string, надо вывести из цикла.