代码生成(用C语言写一个用一门高级编程语言生成0~999 999(均包含,或者更大范围)之间的随机整数20 000个,要求随机数都不相同(如相同,则需要去重复并重新生成当前随机数),即,得到20 000个两两不同的随机数。)
时间: 2023-09-11 12:05:35 浏览: 102
### 回答1:
以下是用C语言实现生成不重复随机数的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int num[20000];
int i, j, tmp;
srand((unsigned)time(NULL)); // 随机数种子
for (i = 0; i < 20000; i++) {
num[i] = rand() % 1000000; // 生成0~999999的随机整数
for (j = i - 1; j >= 0; j--) {
if (num[j] == num[i]) { // 如果有重复的数,则重新生成随机数
i--;
break;
}
}
}
// 冒泡排序
for (i = 0; i < 19999; i++) {
for (j = 0; j < 20000 - i - 1; j++) {
if (num[j] > num[j + 1]) {
tmp = num[j];
num[j] = num[j + 1];
num[j + 1] = tmp;
}
}
}
// 输出随机数
for (i = 0; i < 20000; i++) {
printf("%d ", num[i]);
}
return 0;
}
```
该程序使用了冒泡排序对生成的随机数进行排序,确保输出的结果是有序的。
### 回答2:
在C语言中,我们可以使用rand()函数生成随机数。但是rand()函数生成的随机数是伪随机数,并不能保证每次运行程序生成的随机数都不相同。
要解决这个问题,我们可以借助高级编程语言的特性,比如使用集合(Set)来确保生成的随机数都不相同。具体步骤如下:
1. 创建一个空的集合Set,用来存储生成的随机数。
2. 进入循环,重复以下步骤,直到集合的大小达到20000:
a. 生成一个随机数rand_num,范围为0~999999。
b. 检查rand_num是否已经存在于集合Set中。
c. 如果rand_num不存在于集合中,将其添加到集合中。
3. 循环结束后,集合Set中存储了20000个不重复的随机数。
以下是用C语言实现上述算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 20000
int main() {
int rand_num, count = 0;
int rand_nums[SIZE];
int i;
// 初始化随机数种子
srand(time(NULL));
while (count < SIZE) {
rand_num = rand() % 1000000; // 生成0~999999之间的随机数
int duplicate = 0;
for (i = 0; i < count; i++) {
if (rand_nums[i] == rand_num) {
duplicate = 1; // 随机数已存在于数组中
break;
}
}
if (duplicate == 0) {
rand_nums[count] = rand_num; // 将不重复的随机数存入数组
count++;
}
}
// 输出生成的随机数
for (i = 0; i < SIZE; i++) {
printf("%d ", rand_nums[i]);
}
return 0;
}
```
通过上述算法和代码,我们可以生成20000个范围在0~999999之间的不相同的随机整数。
### 回答3:
要实现生成0~999,999(或更大范围)之间的随机整数20,000个,且保证这些随机数各不相同,可以使用以下方法:
1. 创建一个长度为20,000的整数数组,用于存储生成的随机数。
2. 使用C语言的随机数生成函数(如rand())生成一个随机数,并将其存入数组中。
3. 检查数组中最后一个存储的数字是否与前面的数字重复。
4. 如果重复,则再次生成下一个随机数,并检查其与之前数字的重复情况,直到生成一个不重复的随机数。
5. 重复步骤2-4,直到数组填满为止。
以下是C语言实现代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 检查数组中是否有重复的数字
bool hasDuplicate(int *array, int length, int number) {
for (int i = 0; i < length; i++) {
if (array[i] == number) {
return true;
}
}
return false;
}
int main() {
const int min = 0;
const int max = 999999;
const int count = 20000;
int arr[count]; // 存储随机数的数组
int generatedCount = 0; // 已生成的随机数个数
// 设置随机数种子(利用当前时间)
srand(time(NULL));
while (generatedCount < count) {
int randomNumber = min + rand() % (max - min + 1); // 生成随机数
// 检查是否重复
if (!hasDuplicate(arr, generatedCount, randomNumber)) {
arr[generatedCount] = randomNumber; // 将随机数存入数组
generatedCount++;
}
}
// 输出结果
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
此代码使用了一个长度为20,000的整数数组来存储随机数,通过逐个生成随机数并检查其是否与数组中已有数字重复,以保证生成的20,000个随机数两两不同。
阅读全文