c语言使用循环生成不同随机数

img


我想使用dowhile循环六次,每次产生不同随机数,打印六次不同的课表,但是结果每一次的随机数都是一样的,打印的课表也是一样的,这怎么办求解答谢谢

srand(time(NULL));
这一行放在do的上面一行,而不是里面

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以提供以下解决方案:

    1. 首先,在使用随机数函数前需要先设置随机数发生器的种子。可以使用srand函数设置种子,一般可以使用time()函数获取当前时间作为种子,确保每次运行程序时生成不同的随机数序列。

    2. 然后,在循环内部使用rand()函数生成随机数。由于rand()函数的返回值是一个伪随机数,需要使用取模运算符(%)限定随机数的范围,例如生成1-100之间的随机数可以使用rand() % 100 + 1。

    3. 为了确保每次生成的随机数不重复,可以使用数组记录已经生成过的随机数,在每次生成随机数时进行判断是否与数组中已有的随机数重复。如果重复,则重新生成随机数直到不重复为止。

    下面是一个示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        int i, j, temp;
        int nums[6] = {0};  // 用来记录已经生成的随机数
    
        srand(time(NULL));  // 设置随机数发生器的种子为当前时间
    
        for (i = 0; i < 6; i++) {
            do {
                temp = rand() % 100 + 1;  // 生成1-100之间的随机数
                for (j = 0; j < i; j++) {
                    if (nums[j] == temp) {
                        break;  // 如果与已有的随机数重复则重新生成
                    }
                }
            } while (j < i);
            nums[i] = temp;
        }
    
        // 打印生成的随机数
        for (i = 0; i < 6; i++) {
            printf("%d ", nums[i]);
        }
        printf("\n");
    
        return 0;
    }
    

    在上面的代码中,使用了一个do-while循环来确保每次生成的随机数不重复,如果生成的随机数与已有的随机数重复,则重新生成。在每次生成随机数后,将其记录在数组中,以便下次生成时进行判断。最后打印生成的随机数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^