Ciao a tutti!!
Volevo chiedervi se qualche anima pia abbia voglia di dare uno sguardo al codice e se puo' darmi un alternativa per risolvere questo problema.
Il programma simula il gioco del superenalotto: chiede all'utente la schedina dopodiche continua a generare stringhe di 6 numeri casuali tra 1 e 90; confronta schedina con estrazione e dice dopo quante estrazioni l'utente ha vinto, inoltre ripete questa cosa 10 volte e il problema nasce proprio qua; ossia ogni X estrazioni ripete la stessa stringa e quindi vince sempre ogni X estrazioni(es. dopo 300 estrazioni vince, la seconda volta vince dopo 550, la terza vince di nuovo dopo 300, la quarta vince di nuovo dopo 550 e cosi via.....)
Se non è chiaro eseguite il programmino    anche se dovrete attendere un po per i risulati   ahaha.
Ringrazio per l'aiuto!!
/*Il programma presenta un problema: non genera sequenze casuali ma si ripetono ogni tot cicli*/
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int giocata[6],i,cont=0,j,estrazione[6],contest=0,contest1=0,contemp=0,ntot=0,ntot1=0,nvitt=0,vettestr[RAND_MAX];
int main()
{
    srand(time(NULL));
    /*Legge la giocata*/
    printf("Inserisci i numeri della schedina\n");
    for(i=0;i<6;i++)
    {
        printf("N %d: ",i+1);
        scanf("%d",&giocata[i]);
    }
    /*Controlla che la schedina non abbia numeri maggiori a 90 o minori a 1, se ce ne sono ricomincia*/
    for(i=0;i<6;i++)
    {
        if((giocata[i]>90)||(giocata[i]<=0))
            cont++;
    }
    if(cont!=0)
    {printf("La giocata non e' valida!!\n"); cont=0;return main();}
    /*Controlla che non ci siano numeri ripetuti, se ce ne sono ricomincia*/
    for(i=0;i<6;i++)
    for(j=0;j<6;j++)
    if(giocata[i]==giocata[j])
       cont++;
    if(cont>6)
     {printf("La giocata non e' valida!!\n");cont=0;return main();}
    /*Crea un vettore di RAND_MAX(32676) spazi in cui inserisce valori pseudo casuali da 1 a 90*/
    for(i=0;i<RAND_MAX;i++)
        vettestr[i]=rand()%90+1;
    do /*Questo ciclo ripete la vincita per più volte (cosi da ottenere una calcolo probabilitistico più giusto)*/
    {
    /*Inizializza variabili tempo*/
    time_t m;
    time_t now=time(NULL);
    do/*Questo ciclo continua a confrontare una stringa generata casualmente con la giocata finchè non siano uguali*/
    {
    do /*Questo ciclo continua a ricreare un stringa di 6 numeri finchè non sia valida(valori non ripetuti)*/
    {
        cont=0;
        /*Genero stringa di 6 numeri casuali tra 1 e 90, prendendo il valore pseudo casuale da 1 a RAND_MAX all'interno del vettore creato inzialmente*/
        for(i=0;i<6;i++)
        {estrazione[i]=rand()%RAND_MAX;estrazione[i]=vettestr[estrazione[i]];}
        /*Controllo che non ci siano ripetizioni*/
        for(i=0;i<6;i++)
        for(j=0;j<6;j++)
        if(estrazione[i]==estrazione[j])
           cont++;
    }while(cont!=6);
    cont=0;
    contest++;
    /*Controlla se la giocata e' uguale all'estrazione*/
    for(i=0;i<6;i++)
    for(j=0;j<6;j++)
    if(giocata[i]==estrazione[j])
           cont++;
    /*Risolve il problema di overflow del contatore*/
    if(contest==1000000000)
      {
          contest=0;
          contest1++;
      }
    }while(cont!=6);
    cont=0;
    nvitt++;
    printf("Hai vinto dopo N estrazioni: %d+(%d*1.000.000.000)\n\n",contest,contest1);
    for(i=0;i<6;i++)
        printf("%d ",estrazione[i]);
    printf("\n\n");
    /*Conta il tempo che ci ha messo il programma per eseguire tot cicli, precisamente stampa i secondi*/
    m=difftime(time(NULL),now);
    printf("Tempo trascorso per vincere: %ld secondi\n\n\n",m);
    m=0;
    /*Conta quanti cicli sono stati eseguiti per 10 vittorie*/
    ntot=ntot+contest;
    ntot1=ntot1+contest1;
    contest=0;
    contest1=0;
    if(ntot>=1000000000)
        {ntot=ntot-1000000000; ntot1++;}
    }while(nvitt!=10);
    printf("Num estrazioni tot: %d + (%d * 1.000.000.000)\n\n",ntot,ntot1);
    printf("Vittorie: %d\n",nvitt);
    return 0;
}