输出前M个字母中任取N个的所有组合情况

原创 2015年07月10日 16:24:29

[题目描述]
输入两个数M 和 N ,M>=N ,1<=M<=10,按字典序输出组合情况
[输入样例]
4 2
[输出样例]
AB
AC
AD
BC
BD
CD
[思路]
此题和棋盘问题较为相似,都可以用搜索解决,重点在于每一个值范围的确定比较难
[参考程序]

var a,b:array[1..50000]of longint;
    v:array[1..50000]of boolean;
    num,sum,i,j,k,l,m,n,leave:longint;
procedure print;
var i,j:longint;
begin
for i:=1 to num-1 do
  write(chr(b[i]));
writeln(chr(b[num]));
end;
procedure dfs(k:longint);
var i,j:longint;
begin
  if v[k] then
   begin
     v[k]:=false;
     sum:=sum+1;
     b[sum]:=64+k;
     dec(leave);
     if sum=num then
       print
       else
     for i:=k+1 to n-leave+1 do
        dfs(i);
     v[k]:=true;
     sum:=sum-1;
     leave:=leave+1;
    end;
end;
begin
  readln(n,num);
  leave:=num;
  fillchar(a,sizeof(a),0);
  fillchar(b,sizeof(b),40);
  fillchar(v,sizeof(v),true);
  sum:=0;
  for i:= 1 to n-leave+1 do
    dfs(i);
end.

相关文章推荐

输出N个数中取M个数的所有组合,排列情况

一般思路是由组合算排列,现在借助Next_permutation函数由排列到组合。 1.组合 读入一个字符串,一个整数n,输出字符串中取n个字符的所有组合情况 算法:借助Next_per...

关于数学组合问题在m个球中取n个球-递归实现

//下面我来举一个例子,用递归实现,在5个球中取3个球,假设把c球涂上颜色 然后把涂了颜色的和没涂颜色的分成2部分 这样在5个球中取3个就变成 4个取3个和4个取2...

使用回溯法求所有从n个元素中取m个元素的组合

一个使用回溯法求n个元素中去m个元素的c语言代码,包括2个版本,递归版和迭代版,前者代码简洁,后者性能更好些。...

n个元素中取m个元素的组合、排列问题

如A{1,2,3}则有这些组合:a) 1,2,3; b) 12,13,23; c) 123; 很显然这是一个组合问题,对于组合最常规的算法无非就是递归或回溯。 我们可以把问题分解如下: 1)求数...
  • hxz_qlh
  • hxz_qlh
  • 2013年10月18日 19:09
  • 6541

TODO:排列组合问题:n个数中取m个

TODO:排列组合问题:n个数中取m个 排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不...

排列组合问题:n个数中取m个(Golang实现)

排列组合是一个基本的数学问题,本程序的目标是输出从n个元素中取m个的所有排列、组合。...

Java编程机试:获取某一字符串中(只要字母),每一个字母出现的次数输出格式为a(x)b(y)c(z).....m(n)

Java编程:Map集合编程,要求如下:获取某一字符串如:"ag cCCCde3766ddgdfelakgjh"中,每一个字母(只要字母)出现的次数;要求输出格式是:a(2)b(1)h(4)........

组合数求解公式为C……。编程序输入m,n,输出组合数,要求用自定义函数实现求阶乘

/*实验内容:组合数求解公式为C……。编程序输入m,n,输出组合数,要求用自定义函数实现求阶乘 *烟台大学计算机学院114-3班学生 *作者:刘杨 *时间:2012年3月4日 * (2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:输出前M个字母中任取N个的所有组合情况
举报原因:
原因补充:

(最多只允许输入30个字)