题目:假设公司有30w人,每个人编号从1~30w。现在公司举办年会,要求随机10w个人出来做为中奖的员工。
分析:30w人随机10w人,利用rand函数即可,但是考虑到随机数有可能重复,加个set去重即可。
代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <iostream> #include <algorithm> #include <set> using namespace std; #define MAX_NUM 300000 int main(int argc, char **argv) { int pos = 0; set<int> set; srand((unsigned)time(NULL)); while (pos < 100000) { int rand_value = (int)MAX_NUM*(1.0*rand()/(RAND_MAX+1))+1; //get value 1~300000 if (set.find(rand_value) != set.end()) { continue; } set.insert(rand_value); ++pos; } }