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值依然不变,试试取得毫秒呢?

运行结果:

猜你喜欢

转载自blog.csdn.net/java_dmz/article/details/81029275
今日推荐