`
taro
  • 浏览: 135682 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

从M个不同字符中任取N个字符的所有组合(N <= M)

阅读更多
#include <stdio.h>
void select(char* str, int len, char* result, int start, int curr, int dest)
{
    if (curr == dest) puts(result);
    else
    {
        int i;
        for (i = start; curr + len - i >= dest; ++i)
        {
            result[curr] = str[i];
            select(str, len, result, i+1, curr+1, dest);
        }
    }
}

int main()
{
    char *source = "ABCDE";
    char result[8] = {0};
    select(source, 5, result, 0, 0, 3);
    return 0;
}


递归调用很巧妙,尤其是curr + len - i >= dest这个不等式的得来~
分享到:
评论

相关推荐

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

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

    java获取N项的排列结果和组合结果

    使用java找出N项中的M项的排列结果、组合结果。从列表List或者Array中找出n项得到的排列、组合结果——排列A(n,m),组合C(n,m)

    关于密码解密程序,古老NightKL文字解密

    每一组数据第1行是两个整数n和m(1&lt;=n&lt;=27, 1&lt;=m&lt;=100),分别表示 NightKL语言的总字符数和句子的总字符数。接着一行有m 个整数,每一个整数都在1到 n之间,且1到n 中的每一个数都会出现。每个数代表一个古NightKL ...

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

    针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;第二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都...

    正则表达式教程

    &lt;br&gt;{n,m} m 和 n 均为非负整数,其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 &lt;br&gt;&lt;br&gt;3.5 定位符...

    易语言取文本组合源码

    易语言取n-m文本组合源码.内嵌汇编增加速度. 采用的是位计数方式.

    java 正则表达式

    ((event.keyCode&gt;=48&&event.keyCode&lt;=57)||(event.keyCode&gt;=96&&event.keyCode&lt;=105)))//考虑小键盘上的数字键 event.returnValue=false;}&lt;/script&gt; &lt;input onkeydown="onlyNum();"&gt; 只能是英文字符和数字&lt;input ...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    VC 将ComboBox组合下拉框与文本框交互使用.rar

    VC 6.0演示将ComboBox组合下拉框与文本框交互使用的方法,当用户选择下拉框之后,选择的内容项会自动显示在文本输入框中。具体的代码实现:  for (int n = 0; n &lt; 10; n )  {   CString strText = _T("");   ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    在前两种格式中,会将&lt;来源&gt;复制至&lt;目的地&gt;或将多个&lt;来源&gt;文件复制至已存在的&lt;目录&gt;,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也...

    正则表达式详细教程.pdf

    * 大括号({n,m}):匹配num个大括号之前的字符(n&lt;=num&lt;=m) * 字符集((xyz)):匹配与xyz完全相等的字符串 * 或运算符(|):匹配符号前或后的字符 * 转义字符(\):用于匹配一些保留字符 [ ]、( )、{ }、. 、 *...

    最新JAVA编程题全集_50题及答案

    i&lt;=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); }}} 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一...

    在C语言中常见的算法

    在C语言编程中常用到的实用...4 、从 M 个不同字符中任取 N 个字符的所有组合 5 、分解成质因数 6 、寻找迷宫的一条出路, o :通路; X :障碍。 7 、随机分配座位,共 50 个学生,使学号相邻的同学座位不能相邻

    正则表达式

    当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配 的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式 / [a-z] + \ d+/.但是...

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

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

    javascript文档

    小于相等运算符 (&lt;=) 比较两个表达式,看是否一个小于等于另一个。 link 方法 将带 HREF 属性的 HTML 锚点添加到 String 对象中的文本两端。 LN2 属性 返回 2 的自然对数。 LN10 属性 返回 10 的自然对数。 ...

    微软JavaScript手册

    小于相等运算符 (&lt;=) 比较两个表达式,看是否一个小于等于另一个。 link 方法 将带 HREF 属性的 HTML 锚点添加到 String 对象中的文本两端。 LN2 属性 返回 2 的自然对数。 LN10 属性 返回 10 的自然对数。 ...

    JScript 语言参考

    小于相等运算符 (&lt;=) 比较两个表达式,看是否一个小于等于另一个。 link 方法 将带 HREF 属性的 HTML 锚点添加到 String 对象中的文本两端。 LN2 属性 返回 2 的自然对数。 LN10 属性 返回 10 的自然对数。 ...

    freemarker总结

    &lt;=或者lte:判断左边值是否小于等于右边值 注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比 较,"x","x ","X"是不等的.其它的运行符可以...

    python:字符串操作,切片、拼接

    [M:N:K] M指的是开始位置,N是截止位置,K代表步长,MN可以不填,M不填代表从头开始,N不填代表至结尾为止; 逆序字符串的一种写法:[::-1] 字符串中的特殊字符转义 当字符串中出现一些 特殊字符,又希望他们保持本来...

Global site tag (gtag.js) - Google Analytics