`
lingyibin
  • 浏览: 190942 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

一个简单的字符组合算法

阅读更多

有个朋友问了我这个问题:

把几个数组里面的元素任意组合 并输出所有组合。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 a c t  

5 b e s 4 *  

4 3 - a #

 

//思路:

//从第一行往下走,每走一步输出一个字符,走到\0行时,输出换行

//如果row行的col列是\0时,说明下面的行枚举完了,则要返回上一行的下一列的字符,再往下面的行枚举

分享到:
评论

相关推荐

    C#实现排列组合算法完整实例

    排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...

    5个字符的自由组合 算法

    一个简单的算法 5个字符之间的所有组合 全部排列出来

    excel VBA - 排列组合生成算法 - 可指定和值 - 可输出文本文件.xls

    excel VBA - 排列组合生成算法 - ,可快速生成指定项目的所有排列组合

    PHP多个字符串排列组合的算法,组二,组三

    PHP多个字符串排列组合的算法,组二,组三,彩票统计中奖注数的算法中会经常用到

    基于位图的n选m的组合算法实现(C#)

    基于C# 实现的组合算法,可实现对任意类型的数据进行n选m的组合, 比如数字,字符串,对象等。 n必须大于0小于Int.MaxValue

    组合数学全排列换位算法

    组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法

    字符串的全排列和组合算法.doc

    字符串的全排列和组合算法.doc

    算法之排列算法与组合算法详解

    本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。 2. 排列算法 常见的排列算法有: (A)字典序法 (B)递增进位制数法 (C)递减进位制数法 (D)邻位对换法 (E)递归法 介绍常用的两种...

    字符串的组合算法问题的C语言实现攻略

    题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 上面我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串...

    组合数学的算法与程序设计.zip

    组合数学的算法与程序设计.zip

    Golang排列组合算法问题之全排列实现方法

    本文实例讲述了Golang排列组合算法问题之全排列实现方法。分享给大家供大家参考,具体如下: 【排列组合问题】 一共N辆火车(0&lt;N&lt;10),每辆火车以数字1-9编号,要求以字典序排序输出火车出站的序列号。 输入:...

    C经典算法之排列组合

    将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。

    经典java组合算法源码--TryCombination(算法源码)

    System.out.println("对字符数组进行组合:C(4,4)"); Combination strCombination1=new Combination(chArray.length); while(strCombination1.hasMore()){ int[] index=strCombination1.getNext(); for...

    算法基础.打开算法之门.[美]托马斯 H.科尔曼(带详细书签)

    如果你能看懂提纲的内容,就应该能够理解我是如何表达每一步算法,以及如何将这些步骤合并在一起组合成一个完整的算法的。如果你听到过如下笑话,那么你已经是在通往算法世界了: 你听说过被困在淋浴中的计算机专家...

    组合数学排列生成算法之字典序法

    排列生成算法 字典序法 C语言源代码 排列生成算法的一种,采用交换和逆序的方法生成排列

    算法设计与分析 王红梅

    DNA 计算机 习题 10 第 11 章 近似算法 11 .1 概述 11 .1 .1 近似算法的设计思想 11 .1 .2 近似算法的性能 11 .2 图问题中的近似算法 11 .2 .1 顶点覆盖问题 11 .2 .2 TSP 问题 11 .3 组合问题中的近似算法 ...

    基于组合特征的高效数字识别算法

    针对监控屏幕中的数字字符提出了一种高效的识别算法。该算法利用字符图像的欧拉数、凹陷区、水 平和垂直穿线等组合特征完成级联分类,无须对待识别字符进行规整、细化和轮廓提取处理,降低了算法复杂 度,减少了因细化...

    数据结构和算法必知必会的50个代码实现

    ## 数组* 实现一个支持动态扩容的数组* 实现一个大小固定的有序数组,支持动态增删改操作* 实现两个有序数组合并为一个有序数组 ## 链表* 实现单链表、循环链表、双向链表,支持增删操作* 实现单链表反转* 实现两个...

    简单的加密解密算法,混合多种加密操作

    自己编写的一种简单加密解密算法,通过把多种算法进行组合。特点是同个字符串不同时间加密结果不同,混合了多种加密方式,很难用统计的方式对密文进行破解。 加密过程: 1)扩展字符串 2)字符串移位 3)单字符替换 4)...

Global site tag (gtag.js) - Google Analytics