Генерация всех строк длиной N в C - PullRequest
7 голосов
/ 22 января 2011

Я пытался кодировать это сам и ужасно потерпел неудачу. Это в основном то, что я хочу:

a
b
...
z
aa
ba
...
za
ab
bb
...
zz
aaa
baa
...
zzz

В конце он должен был сгенерировать каждую строку, которая короче N символов с набором символов a-z. Так что я не ищу перестановок (из которых 1001 реализация может быть найдена в Интернете), но для комбинаций с заменой (по крайней мере, так называется в Python). Заказ не важен , скорость.

Ответы [ 2 ]

9 голосов
/ 22 января 2011

Похоже, вы хотите это в C, вот способ сделать это:

#include <stdlib.h>
#include <stdio.h>

int inc(char *c){
    if(c[0]==0) return 0;
    if(c[0]=='z'){
        c[0]='a';
        return inc(c+sizeof(char));
    }   
    c[0]++;
    return 1;
}

int main(void){
    int n = 3;
    int i,j;
    char *c = malloc((n+1)*sizeof(char));
    for(i=1;i<=n;i++){
        for(j=0;j<i;j++) c[j]='a';
        c[i]=0;
        do {
            printf("%s\n",c);
        } while(inc(c));
    }
    free(c);
}
3 голосов
/ 22 января 2011

Примерно так (псевдокод):

void CompWithRep(string line,int N) {
  char c;
  if (N==0) return;
  for (c = 'a' ; c <= 'z' ; c++ )
  {
    printf(line + c);
    CompWithRep(line + c,N-1);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...