Tym razem kolejny skrypt do losowania jednak oparty na tablicach dynamicznych. Autorem jest Mariusz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <time.h>
using namespace std;
 
main () {
        srand(time(NULL));
 
        unsigned int *tab, all, ile;
        int j, i;
        do {
                cout << "Podaj maksymalna granice: ";
                cin >> all;
                cout << "Podaj liczbe losowanych elementow: ";
                cin >> ile;
        } while ((ile>all) || (ile==0));
 
        tab = new unsigned int [ile];
 
 
        for (i=0; i<ile; i++) {
                tab[i]=(rand()%all)+1;
                for (j=i-1; j>=0; j--) {
                        if (tab[i]==tab[j]) {
                                tab[i]=(rand()%all)+1;
                                j=i;
                        }
                }
        }
 
        for (i=0; i<ile; i++)
                cout << i << " ma wartosc: " << tab[i] << endl;
 
        delete [] tab;
}

i jeszcze jedna odmiana od Mariusza, ten kod działa tak, że najpierw zeruje wszystkie liczby z których będziemy losować, nastpenie losuje i o ile to możliwe zamienia 0 na 1 i tak az wylosuje pożądaną liczbę elementów:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <time.h>
using namespace std;
 
main () {
        srand(time(NULL));
        unsigned int *tab, all, ile, i;
        do {
          cout << "Podaj calkowita liczbe elementow: ";
          cin >> all;
          cout << "Podaj liczbe elementow losowanych: ";
          cin >> ile;
        } while ((all<ile) || (ile==0));
 
        tab=new unsigned int [all+1];
        for (i=0; i<all+1; i++)
                tab[i]=0;
        i=0;
        do {
          i=(rand()%all)+1;
          if (tab[i]==0) {
                tab[i]=1;
                ile--;
                cout << i << ", ";
          }
        } while (ile);
        delete [] tab;
}
Pozostaw odpowiedź

(c) 2007 by Michał Terbert