C 如何在全部使用之前不重复随机数?

C 如何在全部使用之前不重复随机数?,c,random,C,Random,我有一个代码,我正试图添加支持,所以它不能重复,直到所有的数字都被使用 每次使用random_类型函数时,它都会生成一个随机数,我正在寻找一种方法,在所有函数都被使用之前,这些数字不会重复 代码: 将所有要使用的数字放入一个数组中 洗牌阵法——费舍尔·耶茨洗牌法很常见 按随机顺序从数组中选取数字 使用完所有数字后,重新排列数组并返回到3 您的问题是什么?初始化值为1.的数组。。10,通过随机交换元素来洗牌数组,然后依次使用每个元素。是否忘记包含问题?我看不到问号,也看不到任何可以被视为疑问句的东

我有一个代码,我正试图添加支持,所以它不能重复,直到所有的数字都被使用

每次使用random_类型函数时,它都会生成一个随机数,我正在寻找一种方法,在所有函数都被使用之前,这些数字不会重复

代码:

  • 将所有要使用的数字放入一个数组中

  • 洗牌阵法——费舍尔·耶茨洗牌法很常见

  • 按随机顺序从数组中选取数字

  • 使用完所有数字后,重新排列数组并返回到3


  • 您的问题是什么?初始化值为
    1.的数组。。10
    ,通过随机交换元素来洗牌数组,然后依次使用每个元素。是否忘记包含问题?我看不到问号,也看不到任何可以被视为疑问句的东西。请阅读。把你需要的数字排成一个数组。随机洗牌。然后按顺序使用它们。查一下Fisher-Yates洗牌算法。Carol,这并不是“有点不同”,它只是意味着你需要考虑如何使用这项技术。编写一个包装器函数非常简单,它在您第一次调用集时将其洗牌,并在每次调用时返回洗牌集的下一个未使用的元素,直到看到所有元素为止。起泡,冲洗,重复。你能给我举个例子吗?我不知道understand@Carol:你具体不明白什么?@bill lynch我应该在数组中放哪一部分?记住,每次我使用random_类型函数时只生成一个数字,它不会一次生成十个数字。如果你想重复数字1到10,请将这些数字放入数组:[1,2,3,4,5,6,7,8,9,10]。然后使用该方法对数组进行洗牌。例如,[3,7,2,8,6,5,10,1,4,9]。然后将这些数字按洗牌顺序发送到您想要的任何位置,每次发送一个:3…7…2等。当您发送最后一个数字(示例中的9)时重新洗牌数组并重复。您需要存储洗牌数组并跟踪您所在的位置。在第一次呼叫返回时
    ary[0]
    。在第二次呼叫返回时
    arr[1]
    在第三次呼叫返回时
    arr[2]
    直到没有更多的数组元素可返回。然后重新洗牌数组并从重新洗牌的数组中的
    arr[0]
    重新启动。
    void random_type(int type, int value) {
        int i;
    
        for (i = 0; i < 10; i++) {
            SelectT->type[i] += value;
        }
    }
    
    int main ()
    {
        int randType = rand()%10;
        random_type(randType, 80);
    ]
    
    10,5,1,3,2,6,9,4,8,7
    2,9,1,4,10,7,5,8,3,6