C random matrix with numbers between 0 and 9 -


i'm c newbie , i'm trying make matrix 5x4 numbers between 0 , 9 each number needs there 2 times (i'm trying make memory game). got code think quite mess , not working, question is, how can improve code or how can make matrix in different way?

#include <stdio.h> #include <math.h> #include <stdlib.h>  #define maxc 4 #define maxl 5    int main(){       int n1=0, n2=0, n3=0, n4=0, n5=0, n6=0, n7=0, n8=0, n9=0, n0=0;     int i=0,j=0,r;     int n[maxl][maxc];     srand(time(null));      while(i<5){         j=0;         while(j<4){              r=(rand()%10);              if(r==0 && n0<2){                 n0++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==1 && n1<2){                 n1++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==2 && n2<2){                 n2++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==3 && n3<2){                 n3++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==4 && n4<2){                 n4++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==5 && n5<2){                 n5++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==6 && n6<2){                 n6++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==7 && n7<2){                 n7++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==8 && n8<2){                 n8++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }             if(r==9 && n9<2){                 n9++;                 j++;                 n[i][j]=r;                 printf(" %3d ",n[i][j]);             }          }         i++;     }     return 0; } 

here little change make program shorter.

i've placed n0, n1, .... array indexed r.

#include <stdio.h> #include <stdlib.h> #include <time.h>  #define maxc 4 #define maxl 5  int main() {     int na[10] = {0};     int n[maxl][maxc], i=0;     srand((unsigned)time(null));      while(i<maxl)     {         int j=0;         while(j<maxc)         {             int r = rand() % 10;             if(na[r]<2)             {                 ++na[r];                 n[i][j] = r;                 printf(" %3d ",n[i][j]);                 ++j;             }         }         ++i;         printf("\n");     }     return 0; } 

example output:

   2    6    1    8     4    7    0    2     5    3    7    8     9    1    0    3     5    6    4    9  

your code keeps trying random number until have had each number twice. not best approach.

instead initialize matrix 20 numbers @ fix locations , random shuffle of matrix.


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -