资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
非等概率随机 对一序列数字随机时一般都是等概率的,但有时候希望某些数字出现的可能性更高一些。下面是本人实现的一个非等概率随机函数,可以对序列中多个数字设置不同的出现频率。限于编码水平,如有需要改进之处敬请指点./*rand_seting.h*/#ifndef RAND_SETING_H#define RAND_SETING_H#include #include /*随机条件结构:*定义min到max之间个数字出现的频率,默认为1次.*如果希望某些数字出现频率大于1次,则把这些数字存入数字集(由pmore指向),*对应的出现频率存入频率集(由ptms指向),这两个缓冲区由用户定义及设置,*lmore和ltms分别为对应的缓冲区长度,建议两缓冲区长度相等,允许ltms lmore,*但绝不允许ltms min = min;rt-max = max;rt-pmore = pm;rt-lmore = lm;rt-ptms = pt;rt-ltms = lt;return rt;/*获取随机数,存放在bufret数组中,个数为数组长度bufsz*返回值: 出现非法数据返回-1;否则成功返回,值为获取到随机数的个数(bufsz)*/int rdget(const struct rd_dat *rt, long *bufret, long bufsz)long rval, exmax = 0;long i, j, tmp;/ 验证数据的合法性if (rt-min rt-max | rt-lmore != rt-ltms | bufsz pmore = NULL | rt-ptms =NULL | bufret =NULL)return -1;for (i = 0; i lmore; i+)if (rt-pmorei min | rt-pmorei rt-max)return -1;if (rt-ptmsi max - rt-min + 1;for (i = 0; i ltms; i+)exmax += rt-ptmsi - 1;/ 获取bufsz个随机数srand(time(NULL); / 初始化随机数发生器for (i = 0; i min;if (rval max) / 位于min与max之间的随机数bufreti = rval;continue;/ 大于max的随机数(即:出现频率高的数)tmp = rt-max;for (j = 0; j ltms; j+)tmp += rt-ptmsj - 1;if (tmp = rval)bufreti = rt-pmorej;break;return bufsz;#endif
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号