Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: C++
Forum PHP.pl > Inne > Komputery i oprogramowanie
johnym
Jak moge w n- elementowej tablicy kazdemu z elementow przypisac losowo wartosc ze zbioru n, przy czym zeby w kazdym elemencie byla inna wartosc questionmark.gif
dr_bonzo
kazdemu elementowi i przypisujesz wartosc i
for ( i = 0 => n)
{
array[ i ] = i;
}
teraz trzeba troche pomieszac ta tablice
for (ilestamRazy)
{
j = losowaLiczba( 0, n)
i = losowaLiczba( 0, n)
zamien( array[ i ], array[ j ] )
}
johnym
o men. sprytnie. dzieki. Jeszcze tylko pytanko jaka jest komenda na zamiane tych
wartosci??

chodzi o te linijke
"zamien( array[ i ], array[ j ] )"
bela
Kod
void swap(int &a; int &b) {
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}
dr_bonzo
Musisz miec specjalny kompilator Microsoftu (niestety kosztuje kupe $$$) i do osiagniecia jest to tlyko pod Solarisem. Ale slyszalem o rozwiazaniach z uzyciem dodatkowej zmiennej, szlo jakos tak
x = a[ i ]
a[ i ] = a[ j ]
a[ j ] = x

ale nie sprawdzalem tego nigdy, wiec moga byc bledy



PS. Troche ironii zachecajacej do odrobiny myslenia.
dasko
Jest sprytne rozwiązanie bez dodatkowych zmiennych, bez swapa() z algorithm.h - polega na kilkukrotnym XORowaniu smile.gif
Kod
// ogolnie
a^=b^=a^=b;
// w twoim wypadku
array[i]^=array[j]^=array[i]^=array[j];

Nie wiem jak z efektywnością tego rozwiązania - jedno jest pewne - działa smile.gif
Jak ktoś nie wierzy niech sobie rozpisze bity i sie przekona.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.