c - 如何使用 C 从列表中只选择一个随机数

标签 c arrays random srand

所以我有一个从 0 到 27 的整数数组。

for(i<0; i<28; i++)
{
    ListId[i] = i;
}

我想做的是从那个数组中挑选一个数字,然后在另一个数组中随机重新排序。

我试图用一个标志,数字 -1 替换已经选择的数字:

for(i<0; i<28; i++)
{
    RandomId[i] = i;
    ListId[i] = i;
}

srand(time(NULL));

for(i=0; i<28; i++)
{
    res = rand() % 27;
    aux = ListId[res];

    if (ListId[res] != -1)
    {
        RandomId[i] = aux;
        ListId[res] = -1;
    }
    else
        i--;
}

printf("New list of integers: ");

for(i=0; i<28; i++)
{
    printf("%d | ", RandomId[i]);
}

但最终陷入死循环。

希望有人能帮助我。

提前致谢

最佳答案

注意您的第一个 for 循环:for(i<0;i<28;i++)

注意你的:res = rand() % 27; ... 应该是 28 .

范围% N是 0 到 (N-1),因此您的 27 个结果的范围是 0-26。

关于c - 如何使用 C 从列表中只选择一个随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101416/

相关文章:

客户端和服务器+排序

c - 一旦文件描述符中没有其他内容可读取,就停止 read(2)

arrays - 清除 Polymer 中的数组?

mysql - 同时使用 Group 、 Order by 和 Random 进行 SQL 查询

unit-testing - 测试随机值 - 关于这种方法的想法?

c - sscanf 说明符 %[] 和缓冲区溢出

javascript - 制作一个不带eval()的动态变量对应一个数组

c++ - 在 C++ 中查找数组的最小值和第二小值

c - 在C中生成10到1000000000之间的随机数

c - 回调分配期间出现“无法从...转换”错误(从 C 迁移代码)