我有时会得到相同的随机数。我该如何解决?

问题描述 投票:1回答:2
int main()
{
    int numbers[6];
    srand(time(0));
    for(int j=1;j<=6;j++)
    {
        numbers[j]=rand()%10;
        printf("\n%d",numbers[j]);
    }
}
c random srand
2个回答
0
投票

主要问题是您的范围很小,所以重复,虽然不一定常见,但它们会冒出来足以惹恼您。

我有两个建议,第一个是增加随机数的范围

int main(void) {
    int nums[6];
    srand(time(NULL));

    for (int i = 0; i < 6; ++i) {
        nums[i] = rand() % 100; // range has been increased
        printf("%d\n", nums[i]);
    }
}

绝对确保唯一编号的另一种方法是在添加数组之前检查数组是否已包含该编号。您可能会猜到,根据实现方式的不同,时间复杂度将成为一个因素。

int main(void) {
    int nums[6];
    srand(time(NULL));

    for (int i = 0; i < 6; ++i) {
        int temp = rand() % 10;
        bool exists = false;
        for (int j = 0; j < i; ++j) {
            if (nums[j] == temp)
                exists = true;
                break;
            }
        }

        if (!exists) {
            nums[i] = temp;
            printf("%d\n", nums[i]);
        }
    }
}

-3
投票

在启动时尝试(在rand呼叫之前)

srand(time(NULL));

© www.soinside.com 2019 - 2024. All rights reserved.