我想创建一个矩阵,其所有元素都是1或0.这就是我尝试过的,它会在我想要的随机位置生成1s和0s的矩阵。但是,它每次都会产生相同的矩阵。
#include <stdio.h>
#include <stdlib.h>
int a[10][10];
int i = 0,j= 0,n=0;
int main(void)
{
populate(5);
print(5);
return 0;
}
int populate(int n)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j] = rand()%2;
}
}
}
int print(int n)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
编辑:根据回复,我编辑了我的功能如下。但是我看到我的矩阵现在全部为零或全部。
int populate(int n)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
srand (time(NULL));
a[i][j] = rand()%2;
}
}
}
答案 0 :(得分:1)
但是,它每次都会产生相同的矩阵。
那是因为您没有添加代码来为随机数生成器播种。添加
srand(time(NULL));
在main
开始时,在对rand()
进行任何调用之前。
答案 1 :(得分:0)
您需要添加srand ( time(NULL) );
使用作为种子传递的参数初始化伪随机数生成器。
对于srand
调用中使用的每个不同种子值,伪随机数生成器可能会在后续调用rand
时生成不同的连续结果。
使用相同种子的两个不同初始化将在随后的rand调用中生成相同的连续结果。
如果seed设置为1,则将生成器重新初始化为其初始值,并生成与调用rand或srand之前相同的值。
以下是您如何种子srand
:
/* srand example */
#include <stdio.h> /* printf, NULL */
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
int main ()
{
printf ("First number: %d\n", rand()%100);
srand (time(NULL));
printf ("Random number: %d\n", rand()%100);
srand (1);
printf ("Again the first number: %d\n", rand()%100);
return 0;
}
编辑:由于OP编辑了问题,以下是解决方案:
在方法的最开始使用srand(time(NULL));
。
int populate(int n) {
srand(time(NULL));
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
a[i][j] = rand() % 2;
}
}
return 0;
}