我想生成1-100的随机数,但是要求这些数字的出现几率不同,数越小几率越大。最好有一个参数来说明几率变化的坡度。结果1,2,1,4,3,1,2,6,2,3,9,10,1,2,8,3,2,5,1
其中
1出现5次
2出现5次
3出现2次
4出现1次
总的来说是数越大出现的几率就越小。

解决方案 »

  1.   

    //我写了一个,但是效果不好,效率也比较低
    public static int RandomInt2(int minValue,int maxValue,double 系数)
    {
    int temp=new System.Random().Next(minValue,maxValue*100);
    double temp2=(maxValue*100)*系数;
    int ret=minValue;
    while(temp>temp2+1&&ret<maxValue)
    {
    ret++;
    temp2+=(maxValue*100-temp2)*系数;
    }
    return ret;
    }
      

  2.   

    随便找个数字曲线,用时间做种,很简单啊
    =======
    good 用数学的思路不错
      

  3.   

    //1~100出现的概率一样=1/100
    int i=new System.Random(DataTime.Tips).Next(1,100)
    //以下表达式1的概率 1/100+1/100×1/2+…1/100×1/n…+1/100×1/99+1/100×1/100
    //          2的概率 1/100×0+1/100×1/2+…1/100×1/n…+1/100×1/99+1/100×1/100
    //          n的概率  1/100×1/n+……+1/100×1/99+1/100×1/100
    //这个应该满足你的要求
    //总的来说是数越大出现的几率就越小。
    int value=new System.Random(DataTime.Tips).Next(1,100-i+1)
      

  4.   

    private string getRandomInt(int count) {            Random random;
                StringBuilder sb = new StringBuilder();
                
                random=new Random(unchecked((int)DateTime.Now.Ticks));             for (int i = 0; i < count; i++)
                {
                    int rnd = random.Next(1, 100);
                    int value = random.Next(1, 100 - rnd + 1);
                    sb.Append(value);
                    sb.Append(",");
                }
                return sb.ToString();
            
            }
      

  5.   

    xia  yu  
    好方法
      

  6.   

    dilong_hcj(夏雨) 的方法很好,两次随机数就出来了,唯一缺点是调整“坡度”不是很方便。
      

  7.   

    private string getRandomInt(int count,int podu)
            {            Random random;
                StringBuilder sb = new StringBuilder();            random = new Random(unchecked((int)DateTime.Now.Ticks));            for (int i = 0; i < count; i++)
                {
                    int value = 100;
                    for (int j = 0; j < podu; j++)
                    {
                        value = random.Next(1, value);
                        
                    }                sb.Append(value);
                    sb.Append(",");
                }
                return sb.ToString();        }
    这样怎么样,pudu调成5就比较好了,如果坡度调到10,全是1,看看
      

  8.   

    string str = DateTime.Now.Millisecond.ToString();
                    if(str.Length>2)
                    {
                        str.Substring(str.Length - 2, 2);
                    }
      

  9.   

    handht() :这样“坡度”只能调大不能调小,而且速度也会变满。
      

  10.   

    dilong_hcj(夏雨) ( ) 信誉:100  
    顶个
      

  11.   

    dilong_hcj(夏雨) 的过程我调用了一次, 1 只出现6次,