c语言

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

小亿
268
2024-02-26 16:16:40
栏目: 编程语言

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

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

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 <stdio.h>
#include <stdlib.h>
#include <time.h>

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;
}

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

0
看了该问题的人还看了