太多组了,我只要6组而已。能不能再优化一下代码?
追答这个倒要请教你一下,怎么优化?不用递归,这个很难处理的。用了递归,你就很难控制了。
当然,只打印出前面6组也可以。甚至手工求都很容易,也不用什么狗屁编程了。
abcdfe
abcedf
abcefd
abcfde
abcfed
你的递归只是变换后面而已,而我的要求是:
a,b,c,d,e,f
b,c,d,e,f,a
c,d,e,f,a,b
d,e,f,a,b,c
e,f,a,b,c,d
f,a,b,c,d,e
如果只是你的追问的要求,那就没有上问问来问的意义了。不过就是把数组元素左移,最左边的放到最后,重复这种操作数组共元素个数次。只要学过c语言数组的都会。
另外也没有这么用省略号的吧,把追问的要求放在开始的问里面不就好了?因为按照你的意思,只能让人理解为想获得所有项的全排列。获得这种全排列有一定难度,想要简洁的求出来需要用到递归,并且要注意保存返回值。下面的程序就是符合你的补充要求的。
#include
#include
int main(int argc,char *argv[])
{
char ch[]={'a','b','c','d','e','f'};
char tmpCh;
int len=sizeof(ch)/sizeof(ch[0]);
int i=0;
int j=0;
for(i=0;i<len;i++)
{
/*print the array*/
for(j=0;j<len;j++)
{
printf("%c",ch[j]);
}
printf("\n");
/*exchange the first and the last*/
tmpCh=ch[0];
for(j=0;j<len-1;j++)
{
ch[j]=ch[j+1];
}
ch[len-1]=tmpCh;
}
return 0;
}