标签:
(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