Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Они уже зарабатывают с помощью сервиса Фриланс. Зарабатывай и ты!
Александр
1093
Александр 2014.08.28 18:54 

Может кто подскажет обобщеный алгоритм или код для поиска сочетаний с повторениями.

Как пример: дано 0,1, найти все их тройные сочетания, 000,001,010,011,100,101,110,111.

Типа такого (как для примера):

цикл от a=1 до n
   цикл от b=1 до n 
      цикл от с=1 до n
         печать a,b,c

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

anonymous
365
anonymous 2014.08.28 19:06  
while (true) {
  X[0]++;
  for (int i = 1; i < N; i++) {
    X[i] += X[i - 1] / K;
    X[i - 1] %= K;
  }
  if (X[N - 1] / K > 1) {
    break;
  }
  // do something
}

p.s. Для K являющегося степенью двойки код можно оптимизировать, заменив операции деления и получения остатка от деления на побитовое ИЛИ и побитовое И.

Sergey Dzyublik
4621
Sergey Dzyublik 2014.08.28 19:35  

для чего это все, как дальше будет использоваться?

  000,001,010,011,100,101,110,111 это тоже что и 0, 1, 2, 3, 4, 5, 6, 7 

может побитовыми операция все можно спростить? 

Dmitry Fedoseev
41261
Dmitry Fedoseev 2014.08.28 19:40  
Перевод числа в систему счисления с другим основанием. Длина числа известна, основание тоже, можно найти максимальное число. Далее цикл от нуля до максимума и перевод в систему с другим основанием.
Александр
1093
Александр 2014.08.29 05:24  
Благодарю.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий