就是根据设定数字的大小来控制广告显示的几率,数字越大,显示的几率越高.求算法~~~~先谢谢各位了·走过路过,帮忙顶一个哈
解决方案 »
- 在visual studio 2010 下怎么开发wince 啊,我是小白,求解
- 跪求:谁能帮我把单房间的聊天室改成多房间的
- 新手,请教关于SOCKET的问题
- 一个SQL语句中Sum()函数出错的问题,哪为好心人帮帮我
- Winform界面展示效果
- 求能反编译.ocx和.dll的软件或程序
- Winform的EXE程序中如何調用另外一個ExE程序,并传递参数?
- [求助]使用Office 2003 COM组件在C#中进行SpellingCheck出现的问题
- .aspx页面,如何让表单提交后,按IE后退按钮后,文本框清空?
- 请各位有经验的人士共同讨论一下B/S开发中,如何更好的区分服务器和客户端开发,让系统更加高效!
- C# WebBrowser 遍历网址
- 图片的特效展示?!!
广告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位于上面三个区间中的哪个,就是显示哪个广告
===========================================================
若:
广告A=132,广告B=100,广告C=50
那么 广告A显示132秒,然后广告B显示100秒,广告c显示50秒,又回到广告A显示132秒
/// 权重运算
/// </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;
} }