관심, 여기에 무료 파스칼의 코드 :
PROGRAM SubSets;
USES
SysUtils;
TYPE
TSubArray = ARRAY OF Integer;
PROCEDURE PrintSet(SubSet : TSubArray);
VAR
i : Integer;
h : Integer;
BEGIN
h := High(SubSet);
Write('{');
FOR i := 0 TO h DO
BEGIN
Write(SubSet[i]);
IF i < h THEN Write(',');
END;
Write('} ');
END;
PROCEDURE FindSets(Start, Stop, Pos : Integer; SubSet : TSubArray);
VAR
i : Integer;
HighIndex : Integer;
MaxFirst : Integer;
BEGIN
HighIndex := High(SubSet);
IF Pos = HighIndex THEN
BEGIN
FOR i := Start TO Stop DO
BEGIN
SubSet[Pos] := i;
PrintSet(SubSet);
END;
END ELSE BEGIN
MaxFirst := Stop - (HighIndex - Pos);
FOR i := Start TO MaxFirst DO
BEGIN
SubSet[Pos] := i;
FindSets(i+1, Stop, Pos+1, SubSet);
END;
END;
WriteLn;
END;
VAR
k, n : Integer;
SubSet : TSubArray;
BEGIN
IF ParamCount = 2 THEN
BEGIN
k := StrToInt(ParamStr(1));
n := StrToInt(ParamStr(2));
SetLength(SubSet, n);
FindSets(1, k, 0, SubSet);
END;
END.
그리고 일부 출력 :
C:\Users\Kitana>subsets 6 3
{1,2,3} {1,2,4} {1,2,5} {1,2,6}
{1,3,4} {1,3,5} {1,3,6}
{1,4,5} {1,4,6}
{1,5,6}
{2,3,4} {2,3,5} {2,3,6}
{2,4,5} {2,4,6}
{2,5,6}
{3,4,5} {3,4,6}
{3,5,6}
{4,5,6}
C:\Users\Kitana>