2014-11-30 2 views
0

n 개 원소의 집합 {1,2,3,4,5 ... n}이 주어 졌을 때, 길이 k의 모든 부분 집합을 찾아야합니다.배열의 길이 n의 부분 집합 찾기 (주어진 집합) - 파스칼

예를 들어 n = 4 및 k = 2 인 경우 출력은 {1, 2}, {1,3}, {1,4}, {2, 3}, {2, 4} {3, 4}.

제발, 내가 재귀와 함께해야한다는 것을 알고 있지만 어떻게 시작 해야할지 모르겠다. 아무도 파스칼에서 어떻게하는지 나를 도울 수 있습니까?

대단히 감사합니다! 혼자

답변

0

관심, 여기에 무료 파스칼의 코드 :

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>