2012-04-15 25 views
-1

長さnのすべての文字の組み合わせを生成するCアルゴリズムを手に入れることができますか?私は、出力は次のようにする必要がすべての文字の組み合わせを生成

aaaaaaa 
aaaaaab 
aaaaaac 
. 
. 
. 
zzzzzzx 
zzzzzzy 
zzzzzzz 



for(i = 0; i<length; i++){ 
    pass[i] = 'a'; 
} 

while(1){ 
    for(j=0;j<26;j++){ 
     printf("%s\n",pass); 
     pass[i] = (char)(pass[i]+1); 
    } 
    if(pass[i-1]==z)... 
} 
return 0; 
+0

私は問題を試してみました...これは、学校の割り当てのためではありませんこれはちょうど趣味のプロジェクトです。 – Mitchell

+0

"私は...問題を試してみました" - 次に、いくつかのコード.... –

+0

の#include INTメイン(ボイド){ \t INT長= 7を示す図です。 \t char pass [length + 1]; \t int i = 0、j = 0; \t \t for(i = 0; i Mitchell

答えて

4

はここで再帰を使ったバージョンです:

#include <stdio.h> 
#include <string.h> 

void iterate(char *str, int idx, int len) { 
    char c; 

    if (idx < (len - 1)) { 
     for (c = 'a'; c <= 'z'; ++c) { 
      str[idx] = c; 

      iterate(str, idx + 1, len); 
     } 
    } else { 
     for (c = 'a'; c <= 'z'; ++c) { 
      str[idx] = c; 

      printf("%s\n", str); 
     } 
    } 
} 

#define LEN 3 

int main(int argc, char **argv) { 
    char str[LEN + 1]; 

    memset(str, 0, LEN + 1); 

    iterate(str, 0, LEN); 
} 
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int isFinish(char *str){ 
    return '\0'== str[strspn(str, "z")]; 
} 

void inc_str(char *str){ 
    int index, carry; 
    for(index = strlen(str)-1;index>=0;--index){ 
     if(str[index] == 'z'){ 
      carry = 1; 
      str[index] = 'a'; 
     } else { 
      carry = 0; 
      str[index] += 1; 
     } 
     if(carry == 0)break; 
    } 
} 

int main(){ 
    int n; 
    char *str; 

    n=7;//length 
    str=(char*)malloc(sizeof(char)*(n+1)); 
    //initialize 
    memset(str, 'a', n);//"aa..aa" 
    str[n]='\0'; 

    while(1){ 
     printf("%s\n", str); 
     if(isFinish(str)) 
      break; 
     inc_str(str); 
    } 
    free(str); 
    return 0; 
} 
関連する問題