当前位置: 代码迷 >> C语言 >> 谁有更好的算法
  详细解决方案

谁有更好的算法

热度:122   发布时间:2006-03-07 15:55:00.0
谁有更好的算法

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编辑过]


----------------解决方案--------------------------------------------------------

写个函数试试:函数有两参数,一个是个串,一个是个字符,每次字符从字符串的头走到尾


----------------解决方案--------------------------------------------------------
  相关解决方案