求大神相助!用 c++ 写的关于组合排列的程序,编译和运行都没异常,就是运行的时候不出结果。谢大神们!
求大神相助!用 c++ 写的关于组合排列的程序,编译和运行都没错误,就是运行的时候不出结果。谢大神们!!
#include <iostream>
using namespace std;
#define MaxN 10
class ZUHEPAILIE{
public:
ZUHEPAILIE();
int choice();
void putdata();
void permute(int pos,int n,int r);
void combine(int pos,int h,int n,int r);
int n;
int r;
char used[MaxN];
int p[MaxN];
char s[MaxN];
char str[MaxN];
};
ZUHEPAILIE::ZUHEPAILIE()
{
}
int ZUHEPAILIE::choice()
{
int choose;
cout<<"******************************************************************************"<<endl;
cout<<"输入序号1则为输入"<<endl;
cout<<"输入序号2则为组合"<<endl;
cout<<"输入序号3则为排列: "<<endl;
cout<<"输入除数字1、2、3之外的任意键则退出: "<<endl;
cout<<"******************************************************************************"<<endl;
cout<<"请输入序号进行操作: "<<endl;
cin>>choose;
return choose;
}
void ZUHEPAILIE::putdata()
{
cout<<"您将输入一个长度为n(用户自定义)的字符串\n"<<"请输入字符串长度n:"<<endl;
cin>>n;
cout<<"请输入"<<n<<"个字母(输入时请勿输入相同字母):\n";//最多输入多少个由 MaxN 的值决定
cin>>str;
strcpy(s,str);
cout<<"请输入需要操作的字母数r:\n"<<endl;
cin>>r;
}
//从n个元素中选r个进行排列
void ZUHEPAILIE::permute(int pos,int n,int r)
{
int i;
/*如果已是第r个元素了,则可打印r个元素的排列 */
if(pos == r)
{
for(i=0; i<r; i++)
cout<<s[p[i]];
cout<<endl;
return;
}
for (i=0; i<n; i++)
{
if(!used[i])
{
/*如果第i个元素未用过*/
/*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/
used[i]++;
/*保存当前搜索到的第i个元素*/
p[pos] = i;
/*递归搜索*/
permute(pos+1,n,r);
/*恢复递归前的值,目的是使以后改元素可用*/
used[i]--;
}
}
}
//从n个元素中选r个进行组合
void ZUHEPAILIE::combine(int pos,int h,int n,int r)
{
int i;
/*如果已选了r个元素了,则打印它们*/
if (pos == r)
{
for(i=0; i<r; i++)
cout<<s[p[i]];
cout<<endl;
return;
}
for(i=h; i<=n-r+pos; i++) /*对于所有未用的元素*/
{
if (!used[i])
{
/*把它放置在组合中*/
p[pos] = i;
/*使用该元素*/
used[i]++;
/*搜索第i+1个元素*/
combine(pos+1,i+1,n,r);
/*恢复递归前的值*/
used[i]--;
}