在C中生成不等的随机数

时间:2015-11-18 23:29:00

标签: c random numbers

我编写了一个生成4个随机数字的程序,它应该出现在屏幕上,如下所示:从0000到9999(当然不是按升序排列!)。

问题是我遇到了彼此相同的数字。我该如何解决?我只想生成10,000个数字,范围在0000到9999之间,但不是任何顺序:只是“随机”。

这是我到目前为止所写的内容:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#define SIZE 10000

int main(){

    srand(time(NULL));

    int a[SIZE], b[SIZE], c[SIZE], d[SIZE], i;
    FILE *fd = fopen("combinations_rand.txt", "w");
    assert(fd);

    for(i=0; i<SIZE; i++){      
        a[i] = rand()%10; //array of first digits
        b[i] = rand()%10; //array of second digits, etc...
        c[i] = rand()%10;
        d[i] = rand()%10;
        fprintf(fd, "%d%d%d%d\n", a[i], b[i], c[i], d[i]);
     }
     fclose(fd);
}

2 个答案:

答案 0 :(得分:6)

取一个10000长度的数组并存储0到9999之间的元素。 然后随机播放数组Shuffle array in C

然后在需要时使用前导零打印答案Printing leading 0's in C?

答案 1 :(得分:2)

你应该做的是生成一个数字从09999的数组,然后混合起来,就像这样

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define SIZE 10000

int main()
{
    int numbers[SIZE];

    srand(time(NULL));
    /* Fill the array */
    for (int i = 0 ; i < SIZE ; ++i)
        numbers[i] = i;
    /* Mix it */
    for (int i = 0, j = rand() % SIZE ; i < SIZE ; ++i, j = rand() % SIZE)
    {
        int swap;
        swap = numbers[i];
        numbers[i] = numbers[j];
        numbers[j] = swap;
    }
    /* Display it */
    for (int i = 0 ; i < SIZE ; ++i)
        fprintf(stdout, "%04d\n", numbers[i]);
    return 0;
}