生成不同的随机数

时间:2014-09-28 04:46:24

标签: c arrays

我正在尝试在0到800之间生成100个不同的随机数,并重复生成10次随机数,然后使用逗号分隔数字,但我遇到了问题。在这个例子中,我使用2D数组来实现这一点,但我似乎没有让它工作。

int main(void)
{
  int table[10][10];
  int i;
  int nSize = sizeof(table)/sizeof(int);

  for (i = 0; i < nSize; i++)
  {
     for (j = 0; j < nSize; j++)
        printf("%d,",table[i][j] = rand() % 800);
  }
  printf("\n");
}

输出应该类似于以下内容:

1, 3, 500, 400, 322, ...
2, 5, 200, 321, 212, ...
500, 433, 421, 354, 545, ...
..
..
..
..
..
..
500, 321, 314, 434, 343, ...

以上是一个例子而不是实际值。

3 个答案:

答案 0 :(得分:1)

  1. table的其中一个维度应为100,因为您有100个随机数。
  2. 在内循环中,您应该确保尚未生成随机数,或者(更复杂,更高效)使用某种混洗算法。
  3. rand()%800是否产生0到800之间的数字?

答案 1 :(得分:0)

#define ROW 10
#define COL 10
int array[ROW][COL];
for (i = 0; i < ROW; i++) {
    for (j = 0; j < COL; j++) {
        array[i][j] = rand() % 801; // if rand() % 800, then it generate 0 - 799, never 800

答案 2 :(得分:0)

只需将printf("\n")移动到外部for循环中,您就不必使用数组:

int main(void)
{
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            printf("%s%d", j > 0 ? "," : "", rand() % 800);
        }
        printf("\n");
    }
}

注意:这将生成0到799之间的数字。