作业帮 > 综合 > 作业

100高分求一组合函数或算法,最好是JS的.DELPHI或其他语言也可.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/24 12:51:31
100高分求一组合函数或算法,最好是JS的.DELPHI或其他语言也可.
输入参数:全部是个位数 一串数字或数组(含义,需要组合的数字,比如 1,2,3,4,5,6,7 ) 一个数字(含义:组合数字的个数,比如 2)
需要显示 (结果分行不分行也可,)
1,2|1,3|1,4|1,5|1,6|1,7|
2,3|2,4|2,5|2,6|2,7|
3,4|3,5|3,6|3,7|
4,5|4,6|4,7|
5,6|5,7|
6,7|
又比如, 数字或数组是 1,2,3,4,5 组合数字的个数是 3
那么必须显示
1,2,3|1,2,4|1,2,5|
1,3,4|1,3,5|
1,4,5|
2,3,4|2,3,5|
3,4,5| (结果分行不分行也可,)
关键是两个参数都可变的.两个参数的数字都用个位数字就可以了.
看来还是不行啊.如果我后面的参数是4或者5或者6或者7或者8呢?是不是要写1堆子函数?有没有一步到位的方法呢?
100高分求一组合函数或算法,最好是JS的.DELPHI或其他语言也可.
//Delphi:
function Combination(source :string; len :Integer):string;
var
rsl,sl,tsl :TStringList;
i :Integer;
s,t :string;
begin
sl := TStringList.Create;
rsl := TStringList.Create;
try
while source[1] = ',' do
source := Copy(source,2,Length(source) - 1);
while source[Length(source)] = ',' do
source := Copy(source,1,Length(source) - 1);
sl.Delimiter := ',';
sl.DelimitedText := source;
if sl.Count < len then
begin
Result := '原数据长度小于组合个数' + #13 + '原数据分隔符只能为英文输入法的逗号","';
Exit;
end;
if len = 1 then
begin
for i := 0 to sl.Count - 1 do
Result := Result + sl.Strings[i] + '|';
end
else
begin
while sl.Count >= len do
begin
tsl := TStringList.Create;
try
tsl.Assign(sl);
while tsl.Count >= len do
begin
t := '';
s := '';
for i := 0 to len - 2 do
t := t + tsl.Strings[i] + ',';
for i := len - 1 to tsl.Count - 1 do
s := s + t + tsl.Strings[i] + '|';
rsl.Add(s);
if len > 2 then
tsl.Delete(1)
else
tsl.Clear;
end;
finally
FreeAndNil(tsl);
end;
sl.Delete(0);
end;
Result := rsl.Text;
end;
finally
FreeAndNil(rsl);
FreeAndNil(sl);
end;
end;
//调用
ShowMessage(Combination('1,2,3,4,5,6,7',2));
ShowMessage(Combination('1,2,3,4,5',3));
ShowMessage(Combination('1,2,3,4,5',4));