Generowanie losowej tablicy bez powtorzen
Ostatnio zmodyfikowano 2016-03-20 19:12
HolyShit Temat założony przez niniejszego użytkownika |
Generowanie losowej tablicy bez powtorzen » 2016-03-20 19:12:50 Witam. Staram sie wygenerować losowo tablice bez powtórzeń, ale chce miec pary elementów w tej tablicy o takich samych wartosciach. Algorytm jest prosty. Tworze listę (użycie listy jest konieczne - projekt na studiach) idaca tak 2,2, 3,3, 4,4 itd. Potem wybieram funkja rand() indeks losowej komorki listy i przepisuje wartosc do kolejnego poloa tablicy, a potem usowam komorke i zmniejszam zakres losowania randa o 1. Problem pojawia sie gdy przechodze do praktyki mianowicie ten kod:
int pobierz_wartosc(int indeks, Element *&glowa) { Element *temp=glowa; Element *pop=glowa; Element *nast=NULL; int wylosowana=0; Element *tmp; if(indeks==0) { tmp=glowa; glowa=tmp->next; wylosowana=tmp->dane; delete tmp; }else if (indeks==1) { tmp=glowa->next; glowa=tmp->next; wylosowana=tmp->dane; delete tmp; }else{ for(int i=1;i<indeks;i++) { pop=pop->next; temp=pop->next; nast=temp->next;
}wylosowana=temp->dane; pop->next=nast; delete temp;} return wylosowana;
} ===========================================================
Element *utworz_liste(int dlugosc) { Element *aktualny, *glowa,*tmp; int liczba=2; aktualny=NULL; glowa=NULL; tmp=NULL;
for (int i=0;i<dlugosc;i++) { aktualny=new Element; aktualny->dane=liczba; aktualny->next=NULL; if(glowa) { tmp=glowa; while(tmp->next) { tmp=tmp->next; }tmp->next=aktualny; }else {glowa=aktualny;} if (i%2!=0) {liczba++;} }return glowa; } ============================================================================
void wypelnij_losowymi(int w, int k, int **tab, Element *&glowa) { int zakres=w*k; int wart=0; int pomoc=0;
for (int i=0;i<w;i++) { for (int j=0;j<k;j++) {
srand(time(NULL)); int indeks=rand()%(zakres); wart=pobierz_wartosc(indeks, glowa); cout << "W"<< pomoc << " " << wart << endl; tab[j]=wart; zakres--; pomoc++; }
} }
===================================================================== To co mam w mainie:
int main() {Element *glowa= NULL; glowa=utworz_liste(16); drukuj(glowa); int **TabA;
TabA=tworz_tablice(4,4); wypelnij_losowymi(4,4,TabA,glowa); cout << endl << "===========================" << endl; drukuj_tablice(4,4,TabA); ==========================================================================
Działa, ale tylko czasem tzn. po kolei widze wartosci jakie bedzie przypisywac, ale w wydaje sie losowych miejscach sie wywala, a casem wypełnia całą tablice poprawnie. Nie moge znaleźć niestety bledu. Jakies wskazowki??
Z góry dziękuje za pomoc ;) P.S. wiem ze kod mógłby być bardziej "tresciwy" ale zrobilem to na szybko. |
|
« 1 » |