Algorithm 打印可以从给定集合形成的长度为p的所有可能字符串

Algorithm 打印可以从给定集合形成的长度为p的所有可能字符串,algorithm,Algorithm,给定一组字符和一个正整数p,我必须打印所有可能的长度为p的字符串,这些字符串可以从给定的集合中形成 for eg: if the set is {a,b} and the value of p is 2 Output is: aa,ab,ba,bb 我知道,对于给定的一组大小为n的字符串,将有长度为p的np可能字符串 打印所有可能的字符串的最佳方法是什么。?我只是想要一个解决问题的方法 我使用的是C。您希望按字典顺序列出字符串。最快的方法(和最小的内存使用)是实现一个函数来计算给定字符串的

给定一组字符和一个正整数p,我必须打印所有可能的长度为p的字符串,这些字符串可以从给定的集合中形成

for eg: if the set is {a,b}
 and the value of p is 2

Output is: aa,ab,ba,bb
我知道,对于给定的一组大小为n的字符串,将有长度为p的np可能字符串

打印所有可能的字符串的最佳方法是什么。?我只是想要一个解决问题的方法


我使用的是C。

您希望按字典顺序列出字符串。最快的方法(和最小的内存使用)是实现一个函数来计算给定字符串的下一个字符串。下面是一些诱人的代码:

char first_char='a';
int n_chars = 2;
int p=2;

char result[100];

int i,j;

/* fill-in first string */
for(i=0;i<p;++i) result[i]=first_char;
result[i]=0; /* string terminator */

printf("%s\n",result); /* print first string */
while(1) {
  /* find last character of result which can be incremented
  for (j=p-1;j>=0 && result[j]!=first_char + n_chars -1;j--);
  if (j<0) break; /* this was the last string */

  result[j]++; /* increment j-th character
  for(j++;j<p;++j) result[j]=first_char; /* reset following chars */

  /* print current string */
  printf("%s\n",result);
}
char first_char='a';
int n_chars=2;
int p=2;
字符结果[100];
int i,j;
/*填写第一个字符串*/
对于(i=0;i=0&&result[j]!=first_char+n_chars-1;j--);

if(j一种可能的方法是从一个空字符串开始,使用递归函数逐个添加字符并打印它

这是我的密码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void print_string(char str[],char new_str[],int current_len,int n,int len)
{
    /*
    str=orignal set,
    new_str=empty char array,
    current_len=0(Intially)
    n=no of elements to be used
    len=the value of p given*/
    if(current_len==len)//print string when length is equal to p
    {
        printf("%s\n",new_str);
        return;
    }
    else
    {
        int i;
        for(i=0;i<n;i++)
        {
            new_str[current_len]=str[i];
            print_string(str,new_str,current_len+1,n,len);
        }
    }
}
int main()
{
    char set[]={'a','b'};
    char arr[10]="";
    print_string(set,arr,0,2,2);
    return 0;
}

可以使用向量,我们称之为:string[p]。 如果p代表例7,您将有: 字符串=[0,0,0,0,0,0,0,0]

索引0表示第一个字符,索引1表示第二个字符,依此类推,直到N。 对于字符串“smthing”,您将有:0-s、1-m、2-t、3-h、4-i、5-n、6-g

您可以使用:while(字符串中的所有元素!=“n”){ 对于初始字符串(string[p]={0}),您将拥有:“sss”,这是我们在yes之前构建的第一个字符串。 您将始终在每个循环的索引处添加+1,如果index=n,您将重置它,例如[0 0 9]->[0 1 0]如果n=9。 …通过解释我所描述的索引,你将得到所有可能的组合;
}

同学们,做家庭作业。请不要直接回答。-1表示不要试图自己解决问题。我想你们指的是词典顺序。
aa
ab
ba 
bb