LINUX.ORG.RU

Генерация комбинации


0

0

Народ...Подскажите пожалуйста алгоритм генерации всех возможных комбинаций произвольной(не очень большой) длины состоящих из цифр (2х и 3х видов), т.е. вида XYXYXYX, XYZXYZ, XXYYZZXX и т.д.

anonymous
Ответ на: комментарий от anonymous

возможно...но каким образом его организовать? Для комбинации XY придумал...просто брать двоичные числа нужного диапазона, а вот как быть с XYZ?

anonymous
()
Ответ на: комментарий от anonymous

Троичная система счисления разве не поможет?

ansky ★★★★★
()

Вариант 1:

#define BASE 3
...
for (i1=0;i1<BASE;i1++)
  for (i2=0;i2<BASE;i2++)
    for (i3=0;i3<BASE;i3++)
      for (i4=0;i4<BASE;i4++)
        printf("%c%c%c%c\n",'X'+i1,'X'+i2,'X'+i3,'X'+i4);

Вариант 2, почти универсальный. N-длина цепочки, BASE - основание.

#include <stdio.h>
#define N 4
#define BASE 3
int main() {
  char lst[N];
  int i, acc = 0, acc2;
  memset(lst,0,N*sizeof(char));
  while (acc == 0) {
    for (i=N-1;i>-1;i--) {
      putchar('A' + lst[i]);
    }
    putchar('\n');
    acc = 1;
    for (i=0;(i<N)&&(acc>0);i++) {
      acc2 = acc;
      acc = (lst[i]+acc) / BASE;
      lst[i] = (lst[i]+acc2) % BASE;
    }
  }
  return 0;
}

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.