求按指定比例随机返回结果的算法
给定一个整数数组(N1,N2,N3,...,Ni),要求随机打印该数组的元素,使N1出现的比率为N1/(N1+N2+N3+...+Ni),N2出现的比率为N2/(N1+N2+N3+...+Ni),以此类推。性能要求比较高。
谢谢啦!
[解决办法]
楼主看这样的思路对不对,假设数组都为正数,总和为sum,产生一个值在0-sum之间的随机数,如果数组中第n个数比这个随机数大就打印这个数,否则不打印
大概代码如下:
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]就可以了。这种办法相当于构造了一个均匀分布。