编程中关于穷举的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/29 01:52:19
比如有一个10位的字符串,每一位的字符可能有5种可能(例如a,b,c,d,e),我想输出所有可能的字符串。但是简单一想需要10层循环,怎样才能想出一种更好的方法来解决呢?
怎样递归呢?能给出具体的方法吗?效率能提高多少?

#include<stdio.h>
#define N 3
/*字符串位数预定义,这个N可以改,不过字符串太长了会输出太多的可能,N=3的时候,输出的东西还勉强能看完*/
const char a[5]={'a','b','c','d','e'};

int calcnum(int n)//n表示字符串的长度,计算这样字符串的个数
{
int num=1;
for(int i=1;i<=n;i++)
num*=5;
return num;
}

int getnum(int num,int k)
{
int temp;
for(int i=1;i<=k;i++)
{
temp=num%5;
num/=5;
}
return temp;
}

void main()
{
int num=calcnum(N);
for(int i=0;i<num;i++)
{
for(int j=N;j>=1;j--)
{
int k=getnum(i,j);
printf("%c",a[k]);
}
printf("\n");

}
printf("\n");

}

递归。