问题如下:
   a   出现概率  %10
  b   出现概率   %15
  c   出现概率   %10
  d   出现概率   30%
如何用一个算法,求出来。
就像砸金蛋似的,随机产生 a b c d 的一个!
如果用随机函数的话,a 和 c 不好区分,
如果用区间的话,但是我不知道怎么处理!希望高手帮忙!!!    

解决方案 »

  1.   

    你在1~65中間隨即取一個數字.Random.Next(1,66);
    如果是1~10之間呢就為A,
    11~20為C,
    21~35為B,
    36~65為D
      

  2.   


    protected int Flag
        {
            get
            {
                if (ViewState["Flag"] != null)
                {
                    return int.Parse(ViewState["Flag"].ToString());
                }
                else
                {
                    ViewState["Lid"] = 0;
                    return 0;
                }
            }
            set 
            {
                ViewState["Flag"] = value;
            }
        }    protected void btn_ZaJinHua_Click(object sender, EventArgs e)
        {
            Random rd = new Random();
            string Gailv = "a";
            int i = 0;
            if (Flag == 0)
            {
                i = rd.Next(1, 10000);
            }
            else 
            {
                i = rd.Next(1, 66);
            }        if (i < 11)
            {
                Gailv = "a";
            }        else if (i > 10 && i < 21)
            {
                Gailv = "c";
            }        else if (i > 20 && i < 35)
            {
                Gailv = "b";
            }        else if (i > 36 && i < 66)
            {
                Gailv = "d";
            }        else if (i > 65 && i < 10000)
            {
                Gailv = "e";
                Flag = 1;
            }
            ShowMessage(Gailv);
        }    protected void ShowMessage(string message)
        {
            Response.Write("<script>alert('" + message + "')</script>");
        }
      

  3.   

    只要判斷一下e是不是已經出現了,如果出現了就屏蔽掉它再次出現的可能。
    Code詳見7樓
      

  4.   

    产生不重复随机数
    int a[100];
    for(i=0; i<=99; ++i) a[i]=i;
    for(i=99; i>=1; --i) swap(a[i], a[rand()%i]);
    public class Test 

    public static void Main () 

    int a = 1; 
    int b = 2; 
    swap (ref a, ref b); } 
    public static void swap (ref int a, ref int b) { 
    int temp = a; 
    a = b; 
    b = temp; 
    } } 
      

  5.   

    看了你的代码了,a-d 用65 内的随机数完全没有什么问题,
    但是(a-d )和 e 的可能性是一样的,
    都是随机出来的,
      

  6.   

    看了你的代码了,a-d 用65 内的随机数完全没有什么问题, 
    但是(a-d )和 e 的可能性是一样的, 
    都是随机出来的,只不过 e 是出来一次之后就不出来了,这个是要考虑的地方!