abc共6种组合方式:abc/acb/bac/bca/cab/cba
#include "stdio.h"
main()
{
char a[3]={'a','b','c'};
int i,j,k,l;
l=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
{
if(i != j && i != k && j != k)/*互不重复就输出*/
{
printf("%c%c%c\n",a[i],a[j],a[k]);
l=l+1;
}
}
printf("%d",l);
getch();
}
这个程序太大了,如果遇到了多的字符就................不知道有没有什么更好的方法
----------------解决方案--------------------------------------------------------
递归,这是书上的一个C++函数例子,楼主可以把输入输出,头文件改一下.
[CODE]
#include<stdio.h>
#include<stdlib.h>
void Perm(char*, int, int);
void Swap(char*, char*);
int main()
{
char str[3] = {'a', 'b', 'c'};
Perm(str, 0, 3);
system("pause");
return 0;
}
void Perm(char *a, int k, int n)
{
if(k==n)
{
for(int i=0; i<n; i++)
printf("%c",a[i]);
printf("\n");
}
else
{
for(int i=k; i<n; i++)
{
Swap(a+k,a+i);
Perm(a,k+1,n);
Swap(a+k,a+i);
}
}
}
void Swap(char *a, char *b)
{
char tmp=*a;
*a = *b;
*b = tmp;
}
[/CODE]
我自己改了吧还是,,,,
[此贴子已经被作者于2006-3-7 16:41:31编辑过]
----------------解决方案--------------------------------------------------------
写个函数试试:函数有两参数,一个是个串,一个是个字符,每次字符从字符串的头走到尾
----------------解决方案--------------------------------------------------------