使用Random在C中生成不同的数字

时间:2014-01-05 23:40:29

标签: c random

所以基本上我在C中编写了这个函数,从1到50生成5个随机数:

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

int main() {
    int c, n;

    printf("Five random numbers from 1 to 50 \n");

    for (c = 1; c <= 5; c++) {
        n = rand()%50 + 1;
        printf("%d\n", n);
    }

    return 0;
}

我想知道如何确定此代码生成的数字彼此不同。

任何帮助?

3 个答案:

答案 0 :(得分:1)

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

void swap(int *a, int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int i, c, n, size = 50;
    int data[size];

    srand(time(NULL));
    for(i=0;i<size;++i)
        data[i] = i+1;

    printf("Five random numbers from 1 to 50 \n");

    for (c = 1; c <= 5; c++) {
        n = rand()%size;
        printf("%d\n", data[n]);
        swap(&data[--size], &data[n]);
    }

    return 0;
}

答案 1 :(得分:0)

将每个数字存储在一个数组中,并根据现有条目检查每个新的随机数。

答案 2 :(得分:0)

您应该检查所有这样的数字:

#include <time.h>

int randomNumbers[5];
int c, d, n;
bool itIsNew;

//current time as random seed
srand(time(0));

for (c = 1; c <= 5;)
{
    n = rand() % 50 + 1;
    itIsNew = true;

    for(d = 1; d <= c; d++)
    {
        if(n == randomNumbers[d - 1])
        {
            itIsNew = false;
            break;
        }       
    }
    if(itIsNew)
    {
        randomNumbers[c - 1] = n;
        c++;
    }
}