c语言,写一个数组 里面有10个人名字 随机抽取3位出来,不能有重复出现

//盗墓者是个丑奴儿,原

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

 

//宏定义:传入数组,返回数组长度

#define str_l(arry) (sizeof(arry)/sizeof(arry[0]))

int main(void){

 

        //10个人名字,缩减为字母代替,且只有4个,方便测试

        char * arr[]={"A","B","C","A"};

        //抽出来的人名,进行保留的数组

        char * arr_t[3]={0};
        int j=0;

 

        //获取当前时间设置随机数种子

        srand(time(NULL));

 

        //判断条件:当数组最后一个值不为null,判断数组已经填充满随机值了

        while(arr_t[str_l(arr_t)-1]==NULL){
                char * str=arr[rand()%str_l(arr)];
                for(int i=0;i<str_l(arr_t);i++){
                        if(str!=arr_t[i]){        //判断随机出的值,在数组中已经有过了,有就跳出,如果判断到数组末尾,代表随机值                                                          //没有重复
                                if(i==(str_l(arr_t)-1)){
                                        arr_t[j]=str;
                                        j++;
                                }
                        }else{
                                break;
                        }
                }
        }

 

        //打印出数组的值

        for(int i=0;i<3;i++)
        printf("%s ",arr_t[i]);
        printf("\n");

        return 0;

}

 

注意:先设置srand随机数种子,在rand随机

如果不设置srand,在第一次运行程序时,根据srand随机数种子进行算法运算得出随机值,rand的值是随机的值。再次运行程序,srand没有被改变,依然根据srand运算。算法是有规律的,值的不变,会导致再次运行程序算出的rand的值依然没变,形成了rand的值是一成不变,需要改变srand随机数算法的值,才能算出不一样的值

在每一次运行程序时,设置不一样就可以了,在本次程序运行时将是随机的。在这里是使用time获得当前事件,来设置srand。在循环每次设置srand是没有意义的,time差距的1s够cpu执行很久了,所以rand值依然不变,试试取得毫秒呢?

 

运行结果:

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值