Problema in C
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
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
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".:
Gli edit sono qualche ";" svanito in giro...
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...
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.
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;
}
Grazie.
Comunque era solo un esempio; potevano starci anche 20 posizioni con 1 e 34 con 0.
Grazie ancora.
Ciao
pigreco
Comunque era solo un esempio; potevano starci anche 20 posizioni con 1 e 34 con 0.
Grazie ancora.
Ciao
pigreco