一个无聊问题关于分配算法(50分)

  • 主题发起人 主题发起人 sdv
  • 开始时间 开始时间
S

sdv

Unregistered / Unconfirmed
GUEST, unregistred user!
A-Z的字母 每组4个
这些字母中可以有多少种组合?
如果每组中可以存在2个重叠的可以多少组合?
 
26*25*24*23/1*2*3*4=14950
 
26*26*25*24/1*2*3*4=16900
 
..那个。。用delphi或c应该如何写?
排列出这些组合
 
26*25*24*23/1*2*3*4?
26*26*25*24/1*2*3*4?
是这样的吗?
我觉得
1*2*3*4是不需要的。
 
a-z
[abcd] == [bcda] != [dcde]
 
C++?不懂。
 
我想要类似下面这种排列
[abcd]
[bcde]
[acde]
不管什么编程语言都可以
高人告诉我
 
to liyinwei:
排列和组合的公式我搞混淆了,不好意思。
to 楼主:
用循环啊。
for i := Integer(a) to Integer(z)do
for j := i + 1 to Integer(z)do
......
 
楼上的那个穷举法我觉得还是行,最终也能解决问题
就是不知道有没有其它方法,不知道矩阵能不能用上。
我记得这种方式就是套一个公式就可以了,记得是如此的。
 
1.
var
sList: TStringList;
i,j,k,l: Integer;
begin
ListBox1.Clear;
FExit := False;
sList := TStringList.Create;
sList.CommaText := 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
for i := 0 to 25do
begin
if FExit then
Break;
for j := 0 to 25do
begin
if j = i then
Continue;
for k := 0 to 25do
begin
if (k = i) or (k = j) then
Continue;
for l := 0 to 25do
begin
if (l = i) or (l = k) or (l = j) then
Continue;
label1.Caption := sList.Strings + sList.Strings[j] +
sList.Strings[k] + sList.Strings[l];
ListBox1.Items.Add(label1.Caption);
label2.Caption := IntToStr(ListBox1.Count);
Application.ProcessMessages;
end;
end;
end;
end;
sList.Free;
end;

2.
var
sList: TStringList;
i,j,k,l: Integer;
begin
ListBox1.Clear;
FExit := False;
sList := TStringList.Create;
sList.CommaText := 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
for i := 0 to 25do
begin
if FExit then
Break;
for j := 0 to 25do
begin
for k := 0 to 25do
begin
if k = j then
Continue;
for l := 0 to 25do
begin
if (l = k) or (l = j) then
Continue;
label1.Caption := sList.Strings + sList.Strings[j] +
sList.Strings[k] + sList.Strings[l];
ListBox1.Items.Add(label1.Caption);
label2.Caption := IntToStr(ListBox1.Count);
Application.ProcessMessages;
end;
end;
end;
end;
sList.Free;
end;
 
后退
顶部