之前写过一个随机发牌的小程序,但是这次不同的是要随机分组的是人名,而不是数字。
要求:将一个班级的23个人随机分成3组(人数可以自行调整)。
#include <stdio.h>
#include <time.h>
int main()
{
char *name[] = {
"周星驰",
"成 龙",
"梁朝伟",
"刘德华",
"李连杰",
"张国立",
"陈道明",
"李幼斌",
"黄晓明",
"濮存昕",
"王 刚",
"赵本山",
"郭德纲",
"李 安",
"吴宇森",
"王家卫",
"杜琪峰",
"刘伟强",
"徐 克",
"张艺谋",
"冯小刚",
"杨 澜",
"胡一虎"};
int len = sizeof(name) / sizeof(name[0]);
int i;
srand((unsigned int)time(NULL));
for(i = 0; i < len - 1; i++)
{
int index = rand() % (len - i); //在(len - i)中产生一个一个随机数,这样处理好处是节约了程序运行的时间,提高了效率
char *tmp = name[index]; //交换,应用堆排序的思想
name[index] = name[len-i-1];
name[len-i-1] = tmp; //将那个生成的随机名字放到最后,而下次生成随机数不包含这个数
}
// 打印
for (i = 0; i < len; i++)
{
if (i % 3 == 0)
printf ("\n");
printf ("%8s", name[len-i-1]);
}
printf ("\n");
return 0;
}