117.info
人生若只如初见

c语言怎么生成不重复的随机数

在C语言中,可以使用rand()函数生成随机数,但是要生成不重复的随机数,可以采用以下方法:

  1. 使用数组存储已经生成的随机数,每次生成新的随机数时,先检查数组中是否已经存在该随机数,如果存在则重新生成,直到生成一个不重复的随机数。
#include 
#include 
#include 

int main() {
    int nums[10]; // 存储生成的随机数
    int index = 0;

    srand((unsigned)time(NULL)); // 初始化随机数种子

    while (index < 10) {
        int new_num = rand() % 100; // 生成0~99的随机数

        // 检查数组中是否已经存在该随机数
        int i;
        int is_duplicate = 0;
        for (i = 0; i < index; i++) {
            if (nums[i] == new_num) {
                is_duplicate = 1;
                break;
            }
        }

        if (!is_duplicate) {
            nums[index] = new_num;
            index++;
        }
    }

    // 输出生成的不重复随机数
    for (int i = 0; i < 10; i++) {
        printf("%d ", nums[i]);
    }

    return 0;
}
  1. 可以使用洗牌算法(Fisher–Yates shuffle)生成一个随机排列,然后取前n个元素作为不重复的随机数。
#include 
#include 
#include 

void shuffleArray(int arr[], int n) {
    srand((unsigned)time(NULL));

    for (int i = n - 1; i > 0; i--) {
        int j = rand() % (i + 1);
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

int main() {
    int nums[10]; // 存储生成的随机数

    for (int i = 0; i < 10; i++) {
        nums[i] = i;
    }

    shuffleArray(nums, 10);

    // 输出生成的不重复随机数
    for (int i = 0; i < 10; i++) {
        printf("%d ", nums[i]);
    }

    return 0;
}

以上是两种生成不重复的随机数的方法,可以根据实际需求选择合适的方法。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe053AzsLAQZRA1I.html

推荐文章

  • c语言goto用法是什么

    在C语言中,goto语句用于从一个位置跳转到另一个位置。它可以用于跳出循环、条件语句或者函数。goto语句的语法如下:
    goto label;
    ...
    label: //...

  • goto在c语言中的运用方法是什么

    goto 语句在 C 语言中允许程序从一个位置跳转到另一个位置。然而,在实际编程中,过度使用 goto 语句通常被认为是一种不好的编程实践,因为它可能导致代码结构混...

  • c语言堆和栈的区别是什么

    C语言中的堆和栈是两种不同的内存分配方式。 栈(Stack):栈是由编译器自动分配和释放的内存区域,用于存储局部变量和函数调用的上下文信息。栈的特点是先进后出...

  • C语言结构体数组怎么定义和使用

    在C语言中,可以通过定义结构体数组来存储多个具有相同数据类型的结构体对象。下面是定义和使用结构体数组的示例代码:
    #include // 定义一个结构体类型

  • mysql字段自增如何设置

    要设置MySQL字段自增,需要在创建表的时候在字段的定义中使用AUTO_INCREMENT关键字。例如:
    CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, nam...

  • navicat怎么查看表的主键

    在Navicat中,您可以通过以下步骤查看表的主键: 打开Navicat并连接到您的数据库。
    在左侧导航栏中选择您要查看主键的表。
    右键单击该表并选择“设计表...

  • mysql出现乱码的原因有哪些

    数据库字符集设置不正确:数据库字符集和连接字符集设置不一致会导致乱码。 数据库表字符集设置不正确:数据表字符集和字段字符集设置不正确会导致乱码。 数据库...

  • PHP调用数组的方法是什么

    在PHP中,可以使用以下几种方法来调用数组: 使用方括号([])和数组键来访问数组元素,例如:$array[‘key’]。
    使用foreach循环遍历数组中的每个元素,例...