C++实现组合问题(字符数组)

本文介绍了如何使用C++解决从含有n个元素的数组中选取m个元素的所有组合问题。通过递归算法实现,尽管在大量元素时空间效率较低,但作为递归理解的一种实践,具有一定的学习价值。程序运行展示了递归过程的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在笔试中看到有一道题目需要用数学上的组合问题罗列出从一个含有n个元素的数组中取出m个元素的所有组合,这个问题当时感觉上可能使用递归的方法可解,但是没有立即写出程序,随后特此记录下来,虽然递归的空间效率比较低,在数组元素数量较多的情况下会程序可能会崩溃,但也算是一种方法,总对递归有种胆怯心里,特此记录一下,首先说明一下C(n,m)表示从n个元素中取出m个的组合。

(1)确定第一个位置可以取得的所有值存入辅助数组temp。

(2)递归C(n-1,m-1),即由于前面已经确定一个数,因此本次递归相当于容量n-1,所取的数m-1。

(3)判断结束,当递归m次即结束。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <string>
#include <iostream>

using namespace std;
vector<string> password;
const int M=3;  //选出元素个数
vector<string> c(const char *pwd,char *temp,int n, int m)
{  
    if (m>0)
        {
            for (int i =n;i>=m;i--)
            {
                temp[m-1]=pwd[i-1];         
                c(pwd,temp,i-1,m-1);
            }
        }
        else 
        {   string s;
            for(int i =0 ;i<M;i++)
            {s+=temp[i];}
            password.push_back(s);                  
        }  
  return password; 
}
vector<string> passwordList(const char *pwd,int wordLen,int pwdLen) 
{
    char *temp=new char[pwdLen];        
    vector<string> v;   
    v=c(pwd,temp,wordLen,pwdLen);
    return v;
}
int main()
{  
    char a[5]={'a','b','c','d','e'};    
    vector<string> v= passwordList(a,5,3);  
    for (vector<string>::const_iterator it=v.begin();it!=v.end();++it)  
    {
       cout<<*it<<endl;
    }
    getchar();
    return 0;
}

程序运行结果如图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值