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