【领卓教育】不重复随机点名

不重复随机点名程序

上一篇博客中记录了随机点名,但是总有一些所谓的“天选之人”,点名十有八九可能是他,但这不是程序问题,是概率问题,是运气太好造成的,比如课堂提问,总一个人也会不好,所以在上个博客的基础上进行了改进,使被点名的人不会再次被点;

具体代码参考   “随机点名”;

原理:

原理相同,详细查看本篇博客的上一篇,包括随机数的产生,rand函数的运用,随机数种子的生成;

程序代码:

#include <stdio.h>
#include <sys/time.h>
#include <string.h>


char * week[]={"张  震","贾英楠","宋文硕","郭书城","李世超",
		       "罗  新","江伟东","刘明奇","周义航","赵  洋"};  

char * rand_name(char *name[])
{
    int num,i;
    static char buf[100] = {0} ;
    static int len = 0;
    static int flag = 1;
    
    if(flag == 1)
    {
        len = (sizeof(week)/sizeof(char*));
        flag = 0 ; 
    }
    for(i=0;i<1000;i++)
    {
        num = rand()%len ;
        printf("%-10s\r",week[num]);
        usleep(1000);
    }
    strcpy(buf,name[num]);
    for(i=num;i<len-1;i++ )
    {
        name[i] = name[i+1] ;
    }
    len  --;

    return buf ;
}

int main()
{
    int i ,num;

    struct timeval tv  ; 
    struct timezone tz ;
    gettimeofday(&tv,&tz);
    printf("usec=%ld\n",tv.tv_usec%100);
    srand(tv.tv_usec%100);


    for(i=0;i< (sizeof(week)/sizeof(char*)) ;i++) 
    {
        printf("%s\n",rand_name(week) ) ;
    }





    return 0;
}

代码解释:

本代码采用封装思想,将产生随机名字部分封装成函数,使程序变得条理清晰,没有什么难点,只是将随机的名字在数组中删除,具体删除方式,找到产生的名字在数组中的位置,让它的后一位成员赋值前面成员,最后缩短数组长度,所以实现不重复点名;

仅供参考,还是菜鸟;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值