2010-01-16 4 views
-9

J'ai le code pascals (langage de programmation ne fait rien dire):
Toutes les possibilités de tableau

boîte

[1]: = 14;
case [2]: = 2;
boîte [3]: = 4;
boîte [4]: ​​= 5;
case [5]: = 6;
boîte [6]: = 8;

Je veux obtenir toutes les possibilités. Par exemple, case [1] = case [6], puis case [6] = case [1]. Oui, je peux l'écrire par la main, mais je pense que je peux le rendre plus intelligent, par boucle. Aucune suggestion?

+3

Que voulez-vous dire par « case [1] = boîte [6], la boîte puis [6] = boîte [1] "? –

+0

C'est un exemple. Il peut être aussi box [1] = 2; boîte [2] = 14; boîte [3] = 6; boîte [5] = 4 et etc. Toutes les possibilités. –

+0

Au fait, cette chose en aura 6! (6 * 5 * 4 * 3 * 2 * 1 = 720) possibilités, peut-être que ce sera un peu plus clair. –

Répondre

2

J'ai pris le premier algorithme de permutation que j'ai trouvé dans wikipedia et l'ai implémenté dans Delphi (2009); J'espère que c'est-ce que vous cherchez:

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 déjà? = S

+0

Wow ...... Je ne peux pas croire que cette confusion d'une question a déjà été soulevée auparavant. (Ce n'est vraiment pas si confus, mais wow ...) –

+1

@ Chacha102: En fait, le demandeur est le même. Et c'est étrange ... –

+0

Ce n'est pas ce que je veux réellement, parce que quand un var du tableau change, il doit en changer un autre. Par exemple lorsque la case [1] devient la boîte [2], la case [2] doit également être remplacée par la case [1] –

0

Donc, fondamentalement, vous avez un ensemble d'éléments qui peuvent être soit inclus (1) ou exclus (0). Si vous comptez de 0 à 2^(le nombre d'éléments) -1, chaque entier sera un ensemble de bits indiquant quels éléments sont inclus.

Si vous avez 7 éléments, dans votre boucle de 0 à 127 les éléments choisis sont:

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) 
Questions connexes