问题如下:
有m个数,想从中取出n个数进行组合,试问可以组成多少任意组合.
如m=(2,3,4,5) 取出(n=3)三个数字进行组合 得到组合如下
{2,3,4},{2,3,5},{3,4,5},{2,4,5} 得到4组
请问程序怎么实现.
有m个数,想从中取出n个数进行组合,试问可以组成多少任意组合.
如m=(2,3,4,5) 取出(n=3)三个数字进行组合 得到组合如下
{2,3,4},{2,3,5},{3,4,5},{2,4,5} 得到4组
请问程序怎么实现.
var
Form1: TForm1;
Tmparray : array [0..9] of integer;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
I : Integer;
begin
for i := 0 to 9 do
tmparray[i]:=i;
end;procedure TForm1.Button1Click(Sender: TObject);
var
I,J,K : integer;
begin
listbox1.Clear ;
for i:=low(tmparray) to high(tmparray)-2 do
begin
for j:=i to high(tmparray)-1 do
begin
for k:=j to high(tmparray) do
listbox1.Items.Add(inttostr(tmparray[i])+','+inttostr(tmparray[j])+','+inttostr(tmparray[k]));
end;
end;
end;
列举从整数0至n-1中任取r个整数的所有组合。设求得组合中的各数分别存储于数据组C的C0,C1……Cr-1中,并假定C0<…n-r+i.如设n=5,r=3,则i<2+i(0<3)。由初始组合0,1,2开始,可心依次产生以下组合序列:
012,013,014,023,024,034,123,124,134,234
产生组合的方法是:
1. 对上一组合C0,C1,…Cr-1,自右端开始递增的Ci ;
2. 递增Ci后仍满足Ci的性质,表示可以开成下一个组合,则递增Ci,并顺序生成Ci+1至Cr-1;
3. 递增Ci后不满足Ci的性质,则回溯;
4. 直至i减至小于0为止。
===example=====
private static void compNumbers(int n,int r)
{
int N =100;
int[]c= new int[N];
int i, j;
//生成初始集
for(j=0;j<r;j++)
{
c[j]=j;
Console.Write(c[j]);
}
Console.WriteLine();
i = r-1;
do
{
if(c[i]<n-r+i) /*如调整c[i]是可接受的*/
{
c[i]++; /*递增c[i]*/
for(j=i+1;j<r;j++)
{
c[j]=c[j-1]+1;
}
for(j=0;j<r;j++)
{
Console.Write(c[j]);
}
Console.WriteLine();
i = r-1;
}
else
{
i--;/*回溯*/
}
}while(i>=0);
}========================
begin
if n=1 then a:=1 else
a:=n*a(n-1)
end
function b(m:integer):integer;
begin
if m=1 then b:=1
else b:=m*b(m-1);
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=n/m
edit1.text:=inttostr(i);
end刚学的 不知道行不行啊?