-2

ユーザーが指定した長さの文字 ABC を使用して文字列を生成する必要があります。ユーザーが長さとして 4 を指定した場合、コードは次のように表示されるとします。

AAAA  
AAAB  
AAAC  
AABA    
.  
.  
.  
CCCC.   

文字列 ABC の順列を生成できます。しかし、私の質問は、ユーザーが A、B、C のいずれかのみを含む 4 または 5 または 6 文字の順列を生成する方法よりも入力 4 または 5 または 6 を与えるかどうかです。助けてください。コードまたはコーディング方法の手順を教えてください。

ヒント、アイデア、提案をいただければ幸いです。

4

3 に答える 3

1

順列を基数 4 の数値システムで表します。A を 0 に、B を 1 に、B を 1 に、C を 2 に、D を 3 にマップします。1 から 4 4 (256) までのすべての数値を繰り返し、基数 4 の各数値を表し、数字を置き換えます。文字付き。

于 2013-02-27T12:55:26.527 に答える
0

これは既知の再帰問題です。

void f (char *dst, const char *src, int depth, int current) {
  int i;

  if (current >= depth) {
    dst[depth] = '\0';
    puts(dst);
  } else {
    for (i = 0; src[i] != '\0'; i++) {
      dst[current] = src[i];
      f (dst, src, depth, current + 1);
    }
  }
}
于 2013-02-27T13:04:04.870 に答える
0

このタイプの再帰的なものを試すことができます...これは、任意の文字が1回出現する文字列に対して機能します...そのため、同じ要素を交換する必要がないように少しだけできます..そうしないと仮定します' 「A」と「A」または「B」と「B」を交換する必要はありません。

void permute(char *a, int i, int n) 
{
    int j; 
    if (i == n)
    printf("%s\n", a);
    else
    {
         for (j = i; j <= n; j++)
         {
             swap((a+i), (a+j));
             permute(a, i+1, n);
             swap((a+i), (a+j)); //backtrack
         }
    }
} 
于 2013-02-27T13:00:10.007 に答える