做过例子:
如果你要0-2之间3个数,概率分别为10%,20%,70%
那么你就需要随即生成1-10个数,并且把其中一个数转换为0;另外2个数转换为1;剩下一个转换为2。不过感觉方法比较笨,不知道有没有其它的方法。

解决方案 »

  1.   

    关于随机数的问题, 你的描述不是很清楚.有两个想法:
    1. 数字生成的概率相同, 学过离散数学的应该知道, 指定范围内的随机数中间的出现概率高,两头的低. 要想得到的数字的概率相同, 只需将范围扩大后取其中间的部分即可. 例如: 要0-6的随机数, 首先,生成0-54的随机数, 然后, 从生成的数字中取24-30之间的数字, 在减24. 这样一来, 所得到的随机数的每个数的概率基本相同.
    2. 指定每个数字出现的概率. 这种实现也不难, 首先声明100个长度的数组, 将制定的数字按比例放到里面. 其次, 按1所说的方法生成0-99之间相同概率的数.然后将相应坐标里的数取出返回. 例如: 生成0-1的随机数(其中, 0出现的概率是30%,1是70%). 
      I) 
      

  2.   

    操作失误, 接上.   I)  int a[10] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1};
      II)  int iIndex = GetSameRandam(0, 9);
     III)  return a[iIndex];