Zwracanie liczb bez powtórzeń

0

Witam,

Chciałbym się podpytać jak mógłbym zmodyfikować oto ten kod ,żeby liczby losowały się bez powtórzeń i żeby dobrze było to widać na zakreślonym kuponie.
Z góry dziękuję.

int main()
{
    srand(time(0));
    int i, j;
    int index[6];
    int tab[7][7];
    int a = 0, tymcz;

    printf("         KUPON         \n");
    for (i = 0; i < 7; i++)
        for (j = 0; j < 7; j++)
            tab[i][j] = (i * 7) + j + 1;
    for (i = 0; i < 7; i++) {
        for (j = 0; j < 7; j++)
            printf("%3d\t", tab[i][j]);
        printf("\n");
    }

    printf("\nW dzisiejszym losowaniu Duzego Lotka wylosowano nastepujace liczby:\n");

    for (i = 0; i < 6; i++) {
        index[i] = 1 + rand() % 49;
    }
    for (i = 0; i < 6; i++) {
        for (j = 0; j < 6; j++) {
            while (index[i] == index[j] && i != j) {
                printf("Robi sie.");
                index[i] = 1 + rand() % 49;
            }
        }
    }
    for (i = 0; i < 6; i++) {
        for (j = 0; j < 6; j++) {
            if (index[i] < index[j]) {
                tymcz = index[i];
                index[i] = index[j];
                index[j] = tymcz;
            }
        }
    }
    for (i = 0; i < 6; i++) {
        printf(" %d ", index[i]);
    }
    printf("\n\n         Zakreslony kupon        \n");
    for (i = 0; i < 7; i++)
        for (j = 0; j < 7; j++)
            if (tab[i][j] == index[a]) {
                tab[i][j] = 0;
                a += 1;
            }
    for (i = 0; i < 7; i++) {
        for (j = 0; j < 7; j++)
            printf("%3d\t", tab[i][j]);
        printf("\n");
    }

    return 0;
}
0

Przede wszystkim, nawet jeśli chcesz losować w kodzie, nie musisz losować formatowania kodu.

Dla większości przypadków następujący algorytm będzie adekwatny:

  1. Wymieszaj tablicę liczb, które podlegają losowaniu ( https://stackoverflow.com/a/6127606/2456565 )
  2. Weź pierwsze N liczb.
0

Najprościej: losuj nr liczby ze zbioru dostępnych a nie liczbę.
Czyli dwie zmienne:

  • int tablica[50]
  • int liczba_wylosowanych

Losujesz wartość od 0 do (49 - liczba_wylosowanych).
Potem wychodzi ci jakieś n, szukasz w pętli n-tej nie wylosowanej liczby w "tablica".
Wylosowaną liczbę oznaczasz jako 0 w tablicy.
Niewylosowane jako 1 lub wartość liczby.

Pewnie są sprytniejsze sposoby, ten jest taki na szybko, żeby zdążyć przed północą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1