Gyakorlati alapok

A kínai mintacsalád ültetési rendje

 

A Totózzunk! című fejezet már bevezetett egy kis kombinatorikai gonoszkodást, ezt folytatjuk most tovább. Ugye a kínai mintacsalád a közismert túlnépesedés miatt 3 főből áll. Az ártatlan gyermek bármikor felteheti azt az egyszerűnek tűnő kérdést:

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

"Hányféleképpen ülhetünk egymás mellé mi hárman 1 sorban: anya, te és én?"

 

Ez valójában kombinatorikai kérdés, annak ismétlés nélküli permutációs változata, ahol 3 személyre 6 lehetséges ültetési rend létezik, mert 3! = 6.

 

Nézzük is meg Java-implementálását, amelyben a személyeket...

...egész számok szimbolizálják.

 

3 db for ciklust kell felhasználnunk, ám egy fontos feltétellel:

 

if (i != j && j != k && i != k)

 

Ezáltal nem engedjük meg, hogy a különböző ciklusokból azonos számok választódjanak ki, például 000.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
        for (int i = 0; i <= 2; i++){
            for (int j = 0; j <= 2; j++){
                for (int k = 0; k <= 2; k++){
                    if (i != j && j != k && i != k){
                        System.out.println ("" + i + j + k + " ");
                    }
                }
            }
        }
    }
}

 

Végeredmény:

012
021
102
120
201
210

 

A feltétel megadása nélkül ismétléses variációba futunk bele, amely 3 elem variálását jelenti olyan módon, hogy már megengedett az elemek ismétlődése. Ekkor a végeredmény 27 db variáció lesz, mert 33 = 27.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
        for (int i = 0; i <= 2; i++){
            for (int j = 0; j <= 2; j++){
                for (int k = 0; k <= 2; k++){
                    System.out.println ("" + i + j + k + " ");
                }
            }
        }
    }
}

 

Végeredmény:

000
001
002
010
011
012
020
021
022
100
101
102
110
111
112
120
121
122
200
201
202
210
211
212
220
221
222