我想给一个变量取值,取1的概率是10%,2的概率是20%,3的概率是30%,4的概率是40%
请问该怎么办

解决方案 »

  1.   

    int result=0;int num = (new Rand()).Rand(0,10);if(num<1)
    {
       num=1;
    }
    else if(num<3)
    {
       num=2;
    }
    else if(num<6)
    {
       num=3;
    }
    else if(num<10)
    {
       num=4;
    }
      

  2.   

    一楼的方法挺好的,不知道每次产生的随机数是不是一样.
    用下面的方法,产生的随机数每次都不一样.
    C#:
    System.Random rand=new Random(DateTime.Now.Millisecond);
    int num=rand.Next(10);
    再用一楼的方法.
      

  3.   

    //得到result的概率是rate
    //0<=rate<=1
    double _result = 0;
    class getnumber(double rate,double result)
    {
    double num = (new Rand()).Rand(0,10)/10;
    if(num < = rate)
    _result = result;
    }   
      

  4.   

    这个这个random要添加什么引用啊???.......
      

  5.   

    System.Random rand=new Random(DateTime.Now.Millisecond); 
                         int num=rand.Next(10);                      if (num < 6)
                         {
                             drc[i,j] = 1;                     }
                         else if (num <8)
                         {
                             drc[i, j] = 2;
                         }
                         else if (num < 9)
                         {
                             drc[i, j] = 3;
                         }
                         else if (num < 10)
                         {
                             drc[i, j] = 4;
    怎么出来结果全是1呢?????
      

  6.   

    随机生成一个100以内的随机数  和你要求的概率比较  比如生成50那么你要的数就是3public int getRandom()
    {
      Random r = new Random ();
      int num = r.Next(100);
      if (num<=13)
      {
        return 1;
      }
      if (num>13&&num<=51)
      {
        return 2;
      }
      if (num>51&&num<=94)
      {
        return 3;
      } 
      if (num>94)
      {
        return 4;
      }
    }大概是这样 具体的数你自己把握
      

  7.   

    谢谢各位的指导,大概算法我了解了,但是现在问题是每次运行的时候,要么出来全是1,要么出来全是2,只有逐句调试的时候,出来的结果才会不一样,请问这是怎么回事啊?
    for (int i = 0; i < 10; i = i + 1)
                 {
                     for (int j = 0; j < 10; j = j + 1)
                     {
                         System.Random rand=new Random(DateTime.Now.Millisecond); 
                         int num=rand.Next(100);                      if (num < 40)
                         {
                             drc[i,j] = 1;
                             
                         }
                         else if (num <65)
                         {
                             drc[i, j] = 2;
                                                  }
                         else if (num < 85)
                         {
                             drc[i, j] = 3;
                                                  }
                         else 
                         {
                             drc[i, j] = 4;
                                                  }
                     }
                 }
      

  8.   

    System.Random rand=new Random(DateTime.Now.Millisecond); 
    for (int i = 0; i < 10; i = i + 1)//把 i = i + 1 改成 i++...
    ...把随机发生器放到循环之外...伪随机发生器用相同的种子每次产生的随机数序列都是相同的...另外你才循环10次,系统时钟在大约15毫秒之内都是一样的...多看看书,搞清楚原理...
      

  9.   

    for (int i = 0; i < 10; i = i + 1) 
                { 
                    for (int j = 0; j < 10; j = j + 1) 
                    { 
                        System.Random rand=new Random(DateTime.Now.Millisecond); 
                        int num=rand.Next(100);                     if (num < 40) 
                        { 
                            drc[i,j] = 1; 
                            
                        } 
                        else if (num <65) 
                        { 
                            drc[i, j] = 2; 
                                                  } 
                        else if (num < 85) 
                        { 
                            drc[i, j] = 3; 
                                                  } 
                        else 
                        { 
                            drc[i, j] = 4; 
                                                  } 
                        System.Threading.Thread.Sleep(10);
                    } 
                }
      

  10.   

    System.Random rand = new Random(); // 随机数初始化必须放在循环外。也没有必要给出种子,用系统默认的就OK了。 for (int i = 0; i < 10; i = i + 1) 
                { 
                    for (int j = 0; j < 10; j = j + 1) 
                    { 
                        int num=rand.Next(100);                     if (num < 40) 
                        { 
                            drc[i,j] = 1; 
                            
                        } 
                        else if (num <65) 
                        { 
                            drc[i, j] = 2; 
                                                  } 
                        else if (num < 85) 
                        { 
                            drc[i, j] = 3; 
                                                  } 
                        else 
                        { 
                            drc[i, j] = 4; 
                                                  } 
                    } 
                }
      

  11.   

    随机数是以当前的CPU时间和时钟频率为随机种子来生成的,所以在一定时间内,生成的数字是一样的。加上System.Threading.Thread.Sleep(1); //经过测试,SLEEP 1就可以了,可以产生不同的数字了
      

  12.   


    完全没有必要 Sleep(1),把
    Random rand = new Random();
    放在循环外就一切OK了。
      

  13.   

    // 取1的概率是13%,取2的概率是37%,取3的概率43%,取四的概率7% 
    // 跟楼上说的一样,随即取数组坐标.用数组里面的数值来控制每个数值占的百分比.          
                int[] randomc = new int[100];
                for (int i = 0; i < 100; i++)
                {
                    if (i < 13)
                        randomc[i] = 1;
                    if (i < 50 && i >= 13)
                        randomc[i] = 2;
                    if (i < 93 && i >= 50)
                        randomc[i] = 3;
                    if (i >= 93)
                        randomc[i] = 4;            }
                System.Random random = new Random(0);
                int ran = random.Next(99);
                Console.WriteLine(randomc[ran].ToString());
                Console.ReadLine();