利用随机数生成函数rand()进行不放回抽样,代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct
{
char name[32];
}MAN;
MAN men[7] = {
"张三",
"李四",
"王二",
"麻子",
"狗蛋",
"铁柱",
"翠花",
};
MAN tmpmen[7];
int main()
{
int ret = 0;
int i = 0;
int j = 0;
int n = 0;
memcpy(tmpmen, men, sizeof(men));
srand((unsigned int)time(NULL));
for(i = 0; i < 7; i++)
{
ret = rand()%(7-i);
printf("%s\n", tmpmen[ret].name);
memset(&men[ret], 0, sizeof(MAN));
n = 0;
memset(tmpmen, 0, sizeof(tmpmen));
for(j = 0; j < 7; j++)
{
if(men[j].name[0])
{
memcpy(&tmpmen[n], &men[j], sizeof(MAN));
n++;
}
}
memcpy(men, tmpmen, sizeof(men));
}
return 0;
}