首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求按指定比例随机返回结果的算法,该如何解决

2012-04-11 
求按指定比例随机返回结果的算法给定一个整数数组(N1,N2,N3,...,Ni),要求随机打印该数组的元素,使N1出现的

求按指定比例随机返回结果的算法
给定一个整数数组(N1,N2,N3,...,Ni),要求随机打印该数组的元素,使N1出现的比率为N1/(N1+N2+N3+...+Ni),N2出现的比率为N2/(N1+N2+N3+...+Ni),以此类推。性能要求比较高。

谢谢啦!

[解决办法]
楼主看这样的思路对不对,假设数组都为正数,总和为sum,产生一个值在0-sum之间的随机数,如果数组中第n个数比这个随机数大就打印这个数,否则不打印
大概代码如下:

C/C++ code
void randPrint(int k[], int size){    int sum = 0;    int index = 0;    for(; index<size; ++index)  sum += k[index];    srand(time(0));    int randNum = rand()%sum;    for(index=0; index<size; ++index){        if(k[index] > randNum)            printf("%d ",k[index]);    }}int main(){    int k[] = {1,2,3,4,5};    randPrint(k,5);    return 0;}
[解决办法]
楼上的if(k[index] > randNum) 这里满足条件的极少吧。
应该创建一个数组array,1到N1放N1, N1+N2放N2, 依次类推. 然后返回一个array[randNum]就可以了。这种办法相当于构造了一个均匀分布。

热点排行