就是根据设定数字的大小来控制广告显示的几率,数字越大,显示的几率越高.求算法~~~~先谢谢各位了·走过路过,帮忙顶一个哈

解决方案 »

  1.   

    法一:.若:
    广告A=132,广告B=100,广告C=50
    可以定义一个list<广告> list=new list<广告>();
    然后在list中插入:A 13.2个,B 10.0个,C 5个,最后将list项随机排列最后list依次显示的广告顺序和几率,就是按照你设定的数字计算出来的权重进行的安排。
    =========================================================================
    法二..若:
    广告A=132,广告B=100,广告C=50可以将A、B、C进行数字区间映射,即:广告A=[0,132],广告B=[133,233],广告C=[234,284]然后定义random rd=new random()
    int num=rd.next(0,284);
    随机取到的num位于上面三个区间中的哪个,就是显示哪个广告
    ===========================================================
      

  2.   

    可以把权重当时间来使用
    若:
    广告A=132,广告B=100,广告C=50
    那么 广告A显示132秒,然后广告B显示100秒,广告c显示50秒,又回到广告A显示132秒
      

  3.   

    嗯嗯·解决了·感谢2楼的思路,虽然我的办法笨了点不过还能用·呵呵·谢谢2楼·放出所有代码结贴:    /// <summary>
        /// 权重运算
        /// </summary>
        public static class WeightsOper<T>
        {
            /// <summary>
            /// 根据权重随机抽取一个实体
            /// </summary>
            /// <param name="obj">实体列表</param>
            /// <returns>返回被抽取的实体</returns>
            public static object GetWeight(IList<T> obj)
            {
                var list = GenerateWeightList(obj);
                int ranNum = RandomNumber(list.Count - 1);
                var result = list[ranNum];
                return result;
            }        /// <summary>
            /// 生成随机数
            /// </summary>
            /// <param name="length"></param>
            /// <returns></returns>
            private static int RandomNumber(int length)
            {
                Random rad = new Random();
                return rad.Next(0, length);
            }        /// <summary>
            /// 生成权重序列表
            /// </summary>
            /// <param name="data">原始数据</param>
            /// <returns>返回数据列表</returns>
            private static IList<T> GenerateWeightList(IList<T> data)
            {           
               int weight = 0;        
               IList<T> list = new List<T>();
               foreach (var one in data)
               {
                    Type type = typeof(T);
                    var t = type.GetProperties();
                    int vweight = 0;
                    // Weight 为权重数 只支持整数
                    if (int.TryParse(type.GetProperty("Weight").GetValue(one, null).ToString(), out vweight))
                    {
                        weight += vweight;
                        for (int i = 0; i < vweight; i++)
                        {
                            list.Add(one);
                        }
                    }
                }
                return list;
            }    }