关闭

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

171人阅读 评论(0) 收藏 举报
分类:

[题目描述]
输入两个数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.
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11865次
    • 积分:363
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论