字符串排列问题!C或C++知道的来啊!!

来源:百度知道 编辑:UC知道 时间:2024/06/01 08:49:06
描述:
键盘输入一个仅由小写字母组成的字符串,输出以该串中任取m个字母的所有排列的排列总数。
输入:
多组测试数据每行一组,分别为字符串及m的值以-1结束
输出:
每行对应一组的数据的答案
样例输入
abcdef 6
-1
样例输出
720
注意!输入的字符串中可能有重复的字符啊!比如aacc,此时,问题可没那么简单了! 此时去两个字符的情况有:aa,cc,ac,ca

//发现那个号称标准算法的无法处理重复字符串的问题
//这个用递归写的,只是没有改需要输入的问题,楼主自己解决吧

#include "iostream"
using namespace std;
#define Type char

int count = 0;
void Swap(Type &x , Type &y)
{
Type t = x;
x = y;
y = t;
}

int ok(Type list[] , int k , int i)
{
if(i>k)
for(int t = k ; t < i ; t++)
if(list[t] == list[i])
return 0;
return 1;
}

int Perm(Type list[] , int k , int m)
{

if(k == m)
{
for(int i = 0 ; i <= m ; i++)
cout<<list[i];
count++;
cout<<endl;
}
else
for(int i = k ; i <= m ; i ++)
{
if(ok(list,k,i))
{
Swap(list[k],list[i]);
Perm(list , k+1 , m);
Swap(list[k],list[i]);
}
}
return count;
}

int main()
{
Type s[4] ={'a','a','c','c'};