14个数随机取9个数组合
1,2,3,4,5,6,7,8,9,10,11,12,13,14 14个数
随机取九个输出
如:1,2,3,4,5,6,7,8,9
1,2,5,6,8,9,10,11,12
6,7,8,9,10,11,12,13,14
.........................
想了挺多久的 都不行 望大侠们赐教.....
[解决办法]
var i, k : Integer; tmpStr : string;begin i := 0; Randomize; repeat k := Random(14); if k <> 0 then begin tmpStr := tmpStr + ',' + IntToStr(Random(14)); Inc(i); end; until i = 9; ShowMessage(Copy(tmpStr,2,Length(tmpStr) - 1));
[解决办法]
是要求 全组合
还是 取n次?是否严格要求不能重复?
[解决办法]
var i: integer; sl: TStringList; str: string;begin sl:= TStringList.Create; sl.Sorted:= true; sl.Duplicates := dupIgnore; sl.clear; str:= ''; while sl.Count < 9 do begin Randomize; i:= Random(14); if i > 0 then sl.Append(inttostr(i)); end; str:= sl.strings[0]; for i:= 1 to sl.Count-1 do str:= str+','+sl.Strings[i]; showmessage(str); sl.free;end;
[解决办法]
procedure TForm1.Button1Click(Sender: TObject); function getRandomStr(istr: integer): Integer; begin Application.ProcessMessages; Randomize; Result := Random(istr); end;var i,j: integer; str9: string; strList: TStringList; strList_random: TList;begin strList := TStringList.Create; try strList.Delimiter := ','; strList.DelimitedText := '1,2,3,4,5,6,7,8,9,10,11,12,13,14'; //随机取9个数 strList_random := TList.Create; try str9 := ''; for i:= 0 to 8 do begin j := getRandomStr(14); if strList_random.Count>0 then begin while strList_random.IndexOf(Pointer(j))<>-1 do begin j := getRandomStr(14); end; end; strList_random.Add(Pointer(j)); if str9='' then str9 := strlist[j] else str9 := str9+','+strlist[j]; end; Memo1.Lines.Add(str9); finally strList_random.Free; end; finally strList.Free; end;end;