2010-01-16 5 views
-9

나는 파스칼 코드 (프로그래밍 언어가 실제로 아무것도 의미하지 않는다)이 있습니다
모든 배열 가능성

상자 [1] = 14;
상자 [2] : = 2;
상자 [3] : = 4;
상자 [4] : = 5;
상자 [5] : = 6;
상자 [6] : = 8;

모든 가능성을 얻고 싶습니다. 예를 들어, 상자 [1] = 상자 [6], 상자 [6] = 상자 [1]. 예, 저는 그것을 손으로 쓸 수는 있지만, 루프를 사용하여 더 영리하게 만들 수 있다고 생각합니다. 어떤 제안?

+3

당신이 [1] = 상자 [6], 다음 상자 박스 "무엇을 의미합니까 [6] = 상자 [1] "? –

+0

예입니다. 또한 box [1] = 2 일 수 있습니다. 상자 [2] = 14; 상자 [3] = 6; 상자 [5] = 4 등 모든 가능성. –

+0

그건 그렇고,이 것은 6이 될 것입니다! (6 * 5 * 4 * 3 * 2 * 1 = 720) 가능성이 있다면 아마도 조금 더 명확해질 것입니다. –

답변

2

위키 백과에서 찾은 첫 번째 순열 알고리즘을 사용하여 Delphi (2009)에서 구현했습니다. 나는 당신을 위해 무엇을 찾고있는 희망 :

type 
    TIntegerArray = array of Integer; 

procedure Permutation(K: Integer; var A: TIntegerArray); 
var 
    I, J: Integer; 
    Tmp: Integer; 

begin 
    for I:= 2 to Length(A) do begin 
    J:= K mod I; 
    Tmp:= A[J]; 
    A[J]:= A[I - 1]; 
    A[I - 1]:= Tmp; 
    K:= K div I; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    K, I: Integer; 
    A: TIntegerArray; 
    S: string; 

begin 
    Memo1.Lines.Clear; 
    for K:= 0 to 719 do begin 
    A:= TIntegerArray.Create(14, 2, 4, 5, 6, 8); 
    Permutation(K, A); 
    S:= ''; 
    for I:= 0 to Length(A) - 1 do 
     S:= S + Format('%3.d ', [A[I]]); 
    Memo1.Lines.Add(S); 
    end; 
end; 
0

I've answered you 이미? = S

+0

와우 ......이 질문이 혼란 스러웠다는 것을 나는 믿을 수 없다. (그것은 정말로 그렇게 혼란스럽지 않지만, 와우 ...) –

+1

@ Chacha102 : 사실, 묻는 사람은 같습니다. 그리고 그것은 이상합니다. –

+0

한 배열의 var가 변경되면 다른 배열을 변경해야하기 때문에 실제로 원하는 것은 아닙니다. 예를 들어 상자 [1]이 상자 [2]가되면 상자 [2]도 상자 [1]로 변경해야합니다. –

0

가 그러니까 기본적으로, 당신은 포함 할 수 있습니다 항목의 설정 (1) 또는 제외 (0). 0에서 2^(항목 수) -1까지 계산하면 모든 정수는 포함 할 항목을 나타내는 비트 집합입니다. 당신이 선택한 0 ~ 127 항목에서 루프에서 7 개 항목이있는 경우

있습니다

x0000000 (loop variable = 0, no items are chosen) 
x0000001 (loop variable = 1, item [1] is chosen) 
x0000010 (loop variable = 2, item [2] is chosen) 
x0000011 (loop variable = 3, items [1] and [2] are chosen) 
... 
x1111111 (loop variable = 127, items [1], [2], [3], [4], [5], [6], [7] are chosen)