0

文字列の可能なすべてのサブシーケンスを見つけようとしています。たとえば、この文字列の「abc」では、合計 8 個の文字列 2^3=8 の組み合わせが見つかります。a、b、c、ab、ac、bc、abc '\0' のように。しかし、私のコードは文字列のすべての文字のみを出力しています。どうやってやるの?

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

int main()
{
    char string[1000];
    int count, i;
    gets(string);
    int len = strlen(string);
    for(i=0; i<len; i++) {
        printf("%c ", string[i]);
    }
    return 0;
}
4

2 に答える 2

0

できることは、文字列をセットと見なし、次のアルゴリズムを使用してすべてのサブセットを出力することです

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

int include[1000];
int n;
char s[1000];
int count=1;
void subsets(int i)
{   int j;
    if(i==n){
        int f=0;

        char temp[1000]="";
        int cnt=0;
        for(j=0;j<n;++j){

            if(include[j]){

                temp[cnt]=s[j];

                if(cnt>0 && temp[cnt]==temp[cnt-1]){ f=1; break;}
                ++cnt;

            }
        }
        temp[cnt]='\0';
        if(!f){ printf("%d =",count); printf("%s\n",temp);  
        ++count;}

     //printf("\n");
   }
    else{
        include[i] = 1;      // This element will be in the subset
        subsets(i + 1);
        include[i] = 0;     // This element won't be in the subset
        subsets(i + 1);
  }
}





void main(){

    scanf("%s",s);
   // printf("%s",s);
    n=strlen(s);
    subsets(0);

}
于 2014-05-25T12:35:06.647 に答える
0

私の理解では、まったく異なるループが必要です。i文字列内のすべての位置をループします。各位置の文字は印刷されるかどうかのどちらかです。この問題は再帰で解決できます。これは、反復アプローチよりもおそらく簡単です。

于 2014-05-25T12:31:32.157 に答える