写一个C语言的程序,从100万个人中抽取2万人
时间: 2024-03-06 08:47:19 浏览: 27
以下是一个简单的 C 语言程序,可以帮助你从100万个人中随机抽取2万人:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TOTAL_PEOPLE 1000000
#define SELECTED_PEOPLE 20000
int main() {
int selected[SELECTED_PEOPLE];
srand(time(NULL)); // 设置随机种子
for (int i = 0; i < SELECTED_PEOPLE; i++) {
int r = rand() % TOTAL_PEOPLE + 1; // 生成一个随机数
selected[i] = r;
}
// 输出结果
printf("Selected people: ");
for (int i = 0; i < SELECTED_PEOPLE; i++) {
printf("%d ", selected[i]);
}
return 0;
}
```
这个程序使用了 `rand()` 函数来生成随机数,然后把这些随机数存储在一个数组中,最后输出结果。
相关问题
写一个C语言的程序,从100万个数中抽取2万个不同的数
以下是一个简单的 C 语言程序,可以帮助你从100万个数中随机抽取2万个不同的数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TOTAL_NUMS 1000000
#define SELECTED_NUMS 20000
int main() {
int selected[SELECTED_NUMS];
srand(time(NULL)); // 设置随机种子
int count = 0;
while (count < SELECTED_NUMS) {
int r = rand() % TOTAL_NUMS + 1; // 生成一个随机数
int duplicate = 0;
// 检查随机数是否已经被选中
for (int i = 0; i < count; i++) {
if (selected[i] == r) {
duplicate = 1;
break;
}
}
if (!duplicate) {
selected[count] = r;
count++;
}
}
// 输出结果
printf("Selected numbers: ");
for (int i = 0; i < SELECTED_NUMS; i++) {
printf("%d ", selected[i]);
}
return 0;
}
```
这个程序使用了 `rand()` 函数来生成随机数,然后把这些随机数存储在一个数组中,同时检查是否有重复的数。如果有重复的数,则重新生成一个随机数。最后输出结果。
写一个C语言的程序,快速从100万个数中抽取2万个不同的数
以下是一个 C 语言程序,可以快速从100万个数中抽取2万个不同的数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TOTAL_NUMS 1000000
#define SELECTED_NUMS 20000
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int selected[SELECTED_NUMS];
srand(time(NULL)); // 设置随机种子
// 首先将前2万个数选中
for (int i = 0; i < SELECTED_NUMS; i++) {
selected[i] = i + 1;
}
// 然后从第2万个数开始,以一定的概率替换已选中的数
for (int i = SELECTED_NUMS; i < TOTAL_NUMS; i++) {
int r = rand() % i + 1; // 生成一个随机数
if (r <= SELECTED_NUMS) {
selected[r - 1] = i + 1;
}
}
// 输出结果
printf("Selected numbers: ");
for (int i = 0; i < SELECTED_NUMS; i++) {
printf("%d ", selected[i]);
}
return 0;
}
```
这个程序的思路是,首先将前2万个数选中,然后从第2万个数开始,以一定的概率替换已选中的数。具体来说,对于第 i 个数,以 2万/i 的概率替换已选中的数(其中 i > 2万)。这个概率的计算方法是,每个数都有 2万/i 的概率被选中,因此最终被选中的概率就是 2万/i。
这个程序的时间复杂度为 O(n),因此可以快速地从100万个数中抽取2万个不同的数。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)