Quote Originariamente inviata da raffaeledicapri Visualizza il messaggio
mmm bene ahah grazie mille per la risposta purtroppo non sono ancora a questi livelli di C quindi mi dovrò arrangiare :/ vediamo se riesco a convertirlo ad un "c base" che posso capire ahah grazie mille
Guarda che questa domanda è stata afforontata svariate altre volte. Ed esiste un algoritmo più efficiente. Basta che fai una ricerca nel forum. In sostanza prendi un array di N elementi che contiene tutte le possibili scelte, generi un indice casuale i fra 0 e N-1 scambi gli elementi i e N-1 e diminuisci N di uno quindi ritorni l'elemento che originariamente si trovava in i.
Eccoti un esempio di una possibile implementazione in C che usa delle variabili globali per semplicità. Il main è un esempio e l'output te ne fa vedere il funzionamento
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 5

int nums[N];
int n;

void init_gen() {
    int i;
    for(i = 0; i < N; ++i) {
        nums[i] = i+1;
    }
    n = N;
}

void reset_gen() {
    n = N;
}

int gen() {
    //nel caso tutti i numeri siano stati generati segnala un uso innappropriato
    if(n < 1) {
        return -1;
    }
    int i = rand() % n;
    --n;
    int tmp = nums[i];
    nums[i] = nums[n];
    nums[n] = tmp;
    return tmp;
}


int main(void) {
    srand(time(NULL));
    init_gen();
    int i, j;
    for(i = 0; i < 6; ++i) {
        for(j = 0; j < 6; ++j) {
            printf("%d ", gen());
        }
        printf("\n");
        reset_gen();
    }
    return 0;
}
Output di esempio
codice:
1 4 5 2 3 -1 
4 2 5 1 3 -1 
3 2 1 5 4 -1 
4 5 1 3 2 -1 
1 2 4 5 3 -1 
5 4 3 2 1 -1
Per risolvere il tuo problema ti basta sostanzialmente cambiare N, ma il codice è facilmente addattabile a casi più complessi in cui gli elementi generati/mescolati non sono semplici numeri.