0

我想创建一个只有两个值的多维数组:0 或 1。

我使用 srand/rand 函数,但数组仅包含 0。这是代码:

#define NB_LINE 4
#define NB_COLUMN 11
int tab[NB_LINE][NB_COLUMN] ;  // global variable
    void generate() {
    srand((unsigned int)time(NULL));

    int n, i, j;
    for(n = 0; n < NB_LINE*NB_COLUMN; ++n){
        do
        {
            i = rand() % NB_LINE;
            j = rand() % NB_COLUMN;
        }
        while (tab[i][j] != 0);
        tab[i][j] = 1 ;
    }
}

我不知道如何解决这个问题?

谢谢 !

编辑:感谢您的回答。您是否认为 rand() 有可能每列只有一个“1”而其他点只包含 0 ?

4

3 回答 3

4

你的循环没有做你认为它做的事情。试试这个:

int tab[NB_LINE][NB_COLUMN] ;  // global variable
void generate() {
    srand((unsigned int)time(NULL));

    int i, j;
    for (i=0; i < NB_LINE; ++i) {
        for (j=0; j < NB_COLUMN; j++) {
            tab[i][j] = rand() % 2;
        }
    }  
}

最后,您将拥有一个数组,其中每个点随机有一个 1 或一个 0。

于 2011-05-09T22:32:29.707 回答
2

我想创建一个只有两个值的多维数组:0 或 1

您应该在生成的随机数上%使用2 。有了这个提示,试着让程序更简单、更容易理解。为什么不按顺序填充数组的每个元素?

于 2011-05-09T22:32:34.730 回答
0

已编辑的问题

您是否认为 rand() 有可能每列只有一个“1”而其他点只包含 0?

是的当然。

不是遍历所有行和所有列,而是将每个单独的数组元素设置为随机值,0或者将所有数组元素初始化为 0(如果它们还没有)1遍历所有列并选择 1 个随机行并将相应的数组元素设置为1.

#include <stdlib.h>
#include <string.h> // memset
#include <time.h>

void generate(int *arr, size_t lines, size_t columns) {
    int col, row;
    memset(tab, 0, lines * columns * sizeof *arr);
    for (col = 0; col < columns; col++) {
        row = rand() % lines;
        tab[row * columns + col] = 1;
    }
}

int main(void) {
    int tab[NB_LINE][NB_COLUMN];
    srand(time(0));                           /* no casts */
    generate(&tab[0][0], NB_LINE, NB_COLUMN);
    /* ... */
}

注意我已经srand()generate()函数中删除了。srand()每次程序调用不应超过一次(以保证最大随机性)。最好的方法是调用srandfrom main()
另外,我将变量命名为iand ,而不是and 。 而且,我创建了一个局部变量而不是全局变量。尽可能避免使用全局变量:这是您自己的忙。在没有全局变量的情况下,信息通过参数传递给函数。jrowcol
tab

于 2011-05-13T08:31:12.050 回答