2016-04-08 40 views
1

我试图设计一个程序,它输出一个随机的0和1的网格,因此网格中的每个位置都可能具有1而不是0。设法得到网格排序变量大小,但我不能想办法随机分配每个位置的数字。我所做的全部工作是将所有职位分配到0。矩阵C编程中的随机数生成

int Lx,Ly,x,y; 

printf("Input height\n"); 
scanf("%d", &Lx); 
printf("Input width\n"); 
scanf("%d", &Ly); 

char mat[Lx][Ly]; 

for(x=0;x<Lx;x++) 
for(y=0;y<Ly;y++) 
mat[Lx][Ly]='0'; 

for(x=0;x<Lx;x++) 
{ 
    for(y=0;y<Ly;y++) 
    printf("%c\t",mat[Lx][Ly]); 
    putchar('\n'); 
} 
return(0); 

}

回答

0

使用rand() % 2

char mat[Lx][Ly]; 

for (x=0; x < Lx; x++) 
{ 
    for (y=0; y < Ly; y++) 
    { 
     int i = rand() % 2; // 0 or 1 as int 
     char cell = '0' + i; // 0 or 1 as ASCII character 
     mat[x][y] = cell;  // store character in matrix 
    } 
} 

印刷

for(x=0; x < Lx; x++) 
{ 
    for (y=0; y < Ly; y++) 
     printf("%c\t",mat[x][y]); 
     putchar('\n'); 
    } 
} 
+1

谢谢,我可以看到这将如何工作,但是当我将其实现到我的程序中时,我似乎现在只获得空间作为输出而不是数字 –

+0

现在可以啊正确打印。但是,如果我输入不同的网格大小,它会随机更改,但如果我多次输入4x4网格,它始终是相同的输出 –

+0

您需要什么大小的网格?假设一个固定的网格大小和固定的种子数量,我的代码应该总是给你相同的可重现的布局。 –

0

划分在for循环的随机函数的其余部分只是分配等的元素:

for(x=0;x<Lx;x++) 
{ 
    for(y=0;j<Ly;y++) 
    { 
    mat[x][y]=rand()%2; 
    } 
} 

使用这个和所有的元素将是0或1,因为它产生模2值将是0或1.