Problema in C

pigreco1
Cari esperti ed appassionati del linguaggio C, riuscite a risolvere il seguente problema?

Ho una matrice [n,m], dove n = righe ed m = colonne.
Voglio riempire la matrice con numeri casuali e fin qui ci sono.
Il problema è che ad esempio voglio 10 elementi posti a 0 e 5 elementi posti ad 1, in modo aleatorio.

Buon divertimento

Risposte
Cheguevilla
Ne vuoi solo 10 posti a 0 e solo 5 posti a 1 o "almeno"?
Comunque il problema cambia di poco:
Caso in cui "almeno 10 siano zero e almeno 5 siano uno".:

void autoInput()
{
int i,j;
int matrice[n][m];
int counter[15][2];
/*la riempi di numeri casuali, come meglio credi*/
for (i=0;i<15;)
   {
   x=rand()%m;
   y=rand()%n;
   for (j=1; j<=15; j++)
   if (counter[j][0]!=x || counter[j][1]!=y)
      {
      matrice[y][x]=i/10;
      i++;
      counter[j][0]=x;
      counter[j][1]=y;
      }
   }
return 0;
}

Gli edit sono qualche ";" svanito in giro...

Cheguevilla
Caso in cui devono esserci "esattamente 10 zero e 5 uno".
Il primo metodo che mi venga in mente è quello di far fare uno scan alla matrice che registri quanti siano gli zero e gli uno già assegnati dalla prima random e attribuirne la differenza.

void autoInput()
{
int matrice[n][m];
int counter[15][2];
int i=j=0;
/*la riempi di numeri casuali, come meglio credi*/
int zero=uno=0;
for (i=0;i<m*n;i++)
   {
   if(matrice[i%n][i/m]==0)
      {
      zero++;
      counter[j][0]=x;
      counter[j][1]=y;
      j++;
      }
   if(matrice[i%n][i/m]==1)
      {
      uno++;
      counter[j][0]=x;
      counter[j][1]=y;
      j++
      }
   }
for (i=zero;i<15-uno;)
   {
   x=rand()%m;
   y=rand()%n;
   for (;j<=15; j++)
   if (counter[j][0]!=x || counter[j][1]!=y)
      {
      matrice[y][x]=i/10;
      i++;
      counter[j][0]=x;
      counter[j][1]=y;
      }
   }
return 0;
} 

pigreco1
Grazie.
Comunque era solo un esempio; potevano starci anche 20 posizioni con 1 e 34 con 0.
Grazie ancora.
Ciao


pigreco

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.