有个朋友问了我这个问题:
把几个数组里面的元素任意组合 并输出所有组合。C++中是有相关的函数,我们自己来实现一下吧。
当然大家一开始就会想到用递归,下面就给出简单的源码。
#include <iostream>
using namespace std;
char arr[100][100];
void work(int row, int col, char* str);
int main()
{
int n,i,j,tmp;
char* str;
//输入
cin>>n; //n个数组
for(i = 0; i < n; i ++)
{
cin>>tmp;
for(j = 0; j < tmp; j ++)
{
cin>>arr[i][j];
}
arr[i][j] = '\0';
}
arr[i][0] = '\0'; //把最后一行标记为\0
//开始处理
str = (char*)malloc((n+1)*sizeof(char));
work(0,0,str); //从0行0列开始处理
cin>>n; //没多大用处,就是让程序停一下,看一下结果
return 0;
}
void work(int row, int col, char* str)
{ //函数中要访问的是row行的col列
if(arr[row][0] == '\0') //到最后一行了,可以输出了
{
str[row] = '\0';
cout<<str<<endl;
return;
}
if(arr[row][col] == '\0') //到最后一列了,要换回上一行
{
return;
}
//不是最后一行,也不是最后一列,输出,并枚举下面的行
str[row] = arr[row][col];
work(row+1,0,str);
work(row,col+1,str);
}
//测试数据:
3 //表示下面有三行,每行都不为空
3 a c t //第一行,开关数字表示后面有几个字符
5 b e s 4 * //第二行,开关数字表示后面有几个字符
4 3 - a # //第三行,开关数字表示后面有几个字符
2
2 a b
2 1 2
3
3 a c t
5 b e s 4 *
4 3 - a #
//思路:
//从第一行往下走,每走一步输出一个字符,走到\0行时,输出换行
//如果row行的col列是\0时,说明下面的行枚举完了,则要返回上一行的下一列的字符,再往下面的行枚举
分享到:
相关推荐
排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...
- **内存管理**: 在第一个代码片段中,使用了动态内存分配和释放(`new`和`delete[]`)来管理组合算法中的数组。这对于大数组是必要的,但需要注意释放内存以避免内存泄漏。 - **错误处理和边界条件**: 虽然示例代码...
本项目是基于C#语言实现的n选m组合算法,能够处理各种类型的数据,包括数字、字符串甚至是自定义的对象。下面我们将深入探讨这个算法的实现原理和C#中的关键概念。 首先,组合算法的核心思想是无序性,即选取的m个...
以下是一个简单的实现方法: ```php function combine($str, $length) { // 将字符串转换为字符数组 $chars = str_split($str); $result = array(); // 使用递归实现组合 function _combine($chars, $length,...
"5个字符的自由组合算法"是一个关于生成所有可能排列组合的问题,这通常涉及到组合数学和递归算法的知识。在这个问题中,我们需要生成一个字符串集合,这个集合包含了所有由5个字符组成的可能的不同序列。 首先,...
在给定的代码示例中,我们看到的是一个简单的组合生成器。它使用了递归的方式来生成所有可能的组合。该算法的核心思想是通过递归调用自身来不断构建更长的字符串组合,直到达到预设的长度为止。这种方式非常适合处理...
字符串的组合算法问题在计算机科学中是一个常见的问题,特别是在算法竞赛如ACM中。这个问题的主要目标是从给定的字符集中生成所有可能的子集或组合。这里我们将详细探讨两种不同的C语言实现方法。 首先,我们可以...
excel VBA - 排列组合生成算法 - ,可快速生成指定项目的所有排列组合
高级组合算法是计算机科学领域中一个重要的研究方向,它主要关注如何设计和分析用于解决复杂问题的有效算法。这些算法通常涉及复杂的数学结构和优化技术,例如网络流、最小成本流等。 #### 1.2 课程背景 本课程由...
组合算法在计算机科学中扮演着至关重要的角色,它是算法分析学的一个核心分支,涉及如何有效地组织和处理数据,以及如何解决复杂问题。这些算法通常包括排列、组合、递归、回溯、动态规划等方法,它们在编程和软件...
在这个“易语言4位特定组合算法.rar”压缩包中,我们很可能会找到一个关于如何在易语言中实现特定组合算法的教程或者源代码。 组合算法是计算机科学中的一个重要概念,它涉及到从有限的元素集合中选取特定数量元素...
组合数学是计算机科学中一个重要的理论基础,它在算法设计和分析中扮演着不可或缺的角色。这个压缩包"组合数学的算法与程序设计.zip"显然包含了关于这个主题的详细资料,很可能是电子书、课件或者代码示例。下面将...
在压缩过程中,算法会创建一个字典,将输入数据中的连续重复字符序列替换为对应的字典索引,从而减少数据量。随着过程推进,字典会动态更新,包含之前出现过的所有组合。解压缩时,通过逆向操作恢复原始数据。LZW...
符号三角形问题是一种有趣的...通过以上步骤和策略,我们可以有效地解决符号三角形问题,实现一个高效且准确的算法。这个过程不仅涉及到算法设计,还涵盖了数据结构、搜索策略和性能优化等多个方面的计算机科学知识。
例如,在设计一个密码生成器时,可以利用组合算法生成所有可能的字符组合,以确保密码的多样性。 总的来说,掌握排列组合算法对于C#程序员来说至关重要,因为它能帮助我们解决很多实际问题。在VS2008这样的开发环境...
字符串的全排列和组合算法是计算机科学中的一种基础算法,主要应用于数据处理和问题求解。在本文档中,我们将探讨如何使用C++实现字符串的全排列算法,并讨论如何处理包含重复字符的情况。 首先,全排列是指从一个...
1. **编码**:在DGA中,个体通常用二进制字符串表示,每个基因对应一个决策变量,表示问题的一种可能解决方案。 2. **初始化种群**:随机生成一定数量的初始个体,形成第一代种群。 3. **选择**:根据适应度函数的...
1. **构建优先关系表**:对于每个非终结符A,根据文法规则创建一个优先关系表,列出所有以A为左侧的产生式,并为每个产生式分配一个优先级,这可以通过人为设定或从已有的语法规则中推导得出。 2. **构造简单优先...
标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...
字符串模式匹配算法可以分为两大类:基于是自动机或字符串组合特点的算法和对文本建立索引的算法。本节课只讨论第一类字符串模式匹配算法。 第一类算法是基于这样一种方式来进行的:设想一个长度为 m 的窗口。首先...