Народ...Подскажите пожалуйста алгоритм генерации всех возможных комбинаций произвольной(не очень большой) длины состоящих из цифр (2х и 3х видов), т.е. вида XYXYXYX, XYZXYZ, XXYYZZXX и т.д.
Вариант 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;
}