码迷,mamicode.com
首页 > 其他好文 > 详细

组合的生成

时间:2015-05-05 14:10:32      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

  (1)我们可以发现,对于一个组合序列,最后一位可达到n,倒数第2位可达到n-1,倒数第r为可达到n-r+1,从n个元素中取出r个元素的一个组合C1C2C3…Cr,即Cr<=n,C(r-1)<=n-1,…,C1<=n-r+1

  (2)当存在Cj<n-r+1时,其中下标最大的设为i,即 i=max{j|Cj<n-r+1}则Ci=Ci+1。相应的C(i+1)=Ci+1,C(i+2)=C(i+1)+1,C(i+3)=C(i

+2)+1……

  步骤如下:

  (1)求满足不等式Cj<n-r+1的最大下标i,i=max{j|Cj<n-r+1}

  (2)Ci=Ci+1;

  (3)C(j+1)=Cj+1,j=i+1,i+2,…,r

  附源码:

 

var

 a:array[0..1000]of longint;

 n,r,i,j:longint;

begin

  readln(n,r);

  for i:=1 to r do a[i]:=i;

  while i>0 do

  begin

    for i:=1 to r do write(a[i],‘ ‘);writeln;

    i:=0;

    for j:=1 to r do if a[j]<n-r+j then i:=j;

    a[i]:=a[i]+1;

    for j:=i+1 to r do a[j]:=a[j-1]+1;

  end;

end.

组合的生成

标签:

原文地址:http://www.cnblogs.com/cxvdzxhb/p/4478880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!