| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 407 人关注过本帖
标题:求大神相助!用 c++ 写的关于组合排列的程序,编译和运行都没错误,就是运行 ...
只看楼主 加入收藏
lvhuayan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-6-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
求大神相助!用 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]--; 
        } 
    } 
} 


 
int main() 
{
    ZUHEPAILIE zuhepailie=ZUHEPAILIE(); 

    cout<<"                           排列组合生成器                              "<<endl;
    

    while(1)
    {
    switch(zuhepailie.choice())
   { 
    case 1:cout<<"输入n个字母,和整数r (r<=n): "<<endl; 
        zuhepailie.putdata();
        break;
    case 2: cout<<"n个字母中选择r个字母形成的所有组合为: "<<endl;
        (0,0,zuhepailie.n,zuhepailie.r);
        break;
    case 3: cout<<"n个字母中选择r个字母形成的所有排列为: "<<endl;
        zuhepailie.permute(0,zuhepailie.n,zuhepailie.r); 
        break;
    default:   break;
   }
    }
    return 0; 
} 

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: choice 
2014-06-18 20:11
maxg1206
Rank: 2
等 级:论坛游民
帖 子:1
专家分:20
注 册:2014-6-18
收藏
得分:20 
程序中used数组没有赋值吧?
另外combine函数和permute函数条件中的!used是不是有点问题?

艺多不压身
2014-06-19 07:45
快速回复:求大神相助!用 c++ 写的关于组合排列的程序,编译和运行都没错误,就 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021485 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved