Autor Wątek: Losowanie z tablicy bez powtorzen[SOLVED]  (Przeczytany 5098 razy)

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:17:37
Nie wiem czy ta odpowiedź już była, ale zrób sobie losową permutację tablicy, a później wybieraj kolejne jej elementy. Jeżeli potrzebujesz potrzebny stan tablicy (kolejność elementów) to zrób sobie kopię.

W skrócie: zamiast losować indeksy tablicy, przemieszaj losowo jej zawartość i czytaj kolejno. To najlepsze rozwiązanie chyba.

Pomogło? :P

Możesz też usuwać z tablicy wybrane wcześniej elementy i losować z pomijaniem pustych pól.
« Ostatnia zmiana: Marzec 18, 2015, 14:19:37 wysłana przez ByerN »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:20:08
Jak pomoglo.... Wiem ze moge losowo wypisac sobie 2 elementy tablicy, ale jak mam sprawdzic czy sie nie powtorzyly i w razie powtorki zeby wypisalo jeden element ??

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:30:34
Jak wylosujesz sobie element z tablicy i go usuniesz z niej, to drugi raz go nie wylosujesz. To samo tyczy się pierwszego rozwiązania. :P

A jeżeli do tablicy mogą wejść 2 takie same elementy i chcesz zapewnić by na wyjściu były tylko różne, to na wejściu pousuwaj duplikaty.
« Ostatnia zmiana: Marzec 18, 2015, 14:32:52 wysłana przez ByerN »

Offline Oti

  • Użytkownik

# Marzec 18, 2015, 14:30:43
Dobra, chyba już wiem o co tu się rozchodzi. To jakieś zadanie domowe-podlinkowany kod wzorcowy to pewnie dzieło jakiegoś kolegi. _user chce zrobić to tak, żeby też działało, ale żeby wyglądało inaczej niż u dobrodusznego kumpla. I ma być bez pętli for pewnie dlatego, że na zajęciach jeszcze jej nie przerobili i OP nie chce się wyróżniać.

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:31:00
@Oti , nie to dzialanie z kursu, chce opanowac material tam podany, a w lekcji gdzie jest to zadanie inny problem jest tak rozwiazany i chce tez tak.

@Bayers, Nie chce usuwac elementu z tablicy bo tego w kursie jeszcze nie bylo, a zadanie moge rozwiazac tylko materialem do tej pory podanym, takze prosze o inna propozycje
Nie wiem jakie duplikaty ! Poprosze o jakies przyklady.
« Ostatnia zmiana: Marzec 18, 2015, 14:35:20 wysłana przez _user »

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:35:40
@Bayers, a jak go usunac z tablicy ?

ByerN nie bayers. Wstaw tam coś co nie należy do zbioru danych wejściowych (dla liczb dodatnich może to być np. -1), albo przepisuj elementy w lewo (od kolejnego po usuniętym) i zapamiętaj rozmiar tablicy. W ten sposób nie allokujesz pamięci (zżera czas), a pamiętając rozmiar wiesz gdzie kończy się tablica.

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:36:35
Nie wiem jakie duplikaty ! Poprosze o jakies przyklady.

xD ? no jak dostaniesz tablicę [2,3,2,1] to masz zduplikowane 2.

W programowaniu trzeba też myśleć. To o czym mówie, technicznie nie wykracza po za poznany przez Ciebie materiał.

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:36:51
W skrócie: zamiast losować indeksy tablicy, przemieszaj losowo jej zawartość i czytaj kolejno. To najlepsze rozwiązanie chyba.

To bylo ciekawe, podaj tego przyklad( i spojrz na ten link z poprzedniej strony, ja chce tak)

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:39:40
Podaj tego przyklad, i spojrz na link

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:39:55
Wylosuj 2 indeksy, a później przepisz.

int buffer = tab[randomId1];
tab[randomId1] = tab[randomId2];
tab[randomId2] = buffer;

randomId1 i randomId2 to 2 losowe indeksy tablicy.

przemieszaj tak kilka razy, a później pętla for i czytasz kolejno tablice.

Link widziałem. Zamiast for użyj while skoro chcesz. xD miłej zabawy.

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:40:50
A gdzie tu sprawdzenie czy sie nie powtarzaja ?


ohh jak milo ze zyczysz milej zabawy :) Wczoraj swietnie sie kilkanascie godzin bawilem, dzis z checia tez zmarnuje kolejny dzien, i pojutrze tez na ten kod :) Bo dalej nie wiem jak to zrobic i sie pewnie nigdy nie dowiem albo najlepiej zostawie ten kurs bo to zadanie niszczy mi psychike
« Ostatnia zmiana: Marzec 18, 2015, 14:42:45 wysłana przez _user »

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:43:23
"Chce  zeby do programu wprowadzalo sie 10 liczb a potem zeby ten program losowo wybieral 8 z nich i wypisywal bez powtorzen."

Elementy tablicy mają się nie powtarzać, a nie liczby. Jak wyciągniesz kolejno elementy z tablicy to się nie powtórzą. xD

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:44:03
Chce zeby liczby sie nie powtarzaly !

Offline ByerN

  • Użytkownik

# Marzec 18, 2015, 14:45:35
Do tablicy wejściowej mogą wejść duplikaty?

Offline _user

  • Użytkownik

# Marzec 18, 2015, 14:47:21
Tak, i zeby nie wypisywalo pare razy jak uzytkownik poda pare razy ta sama liczbe