代码很简单,但算法很经典,话不多说,直接上代码。

    public struct ServerConfig
{
/// <summary>
/// 初始权重
/// </summary>
public int Weight { get; set; }
/// <summary>
/// 当前权重
/// </summary>
public int Current { get; set; }
/// <summary>
/// 服务名称
/// </summary>
public string Name { get; set; }
}

  

        public static int NextServerIndex(ServerConfig[] ss)
{
int index = -1;
int total = 0;
int size = ss.Count(); for (int i = 0; i < size; i++)
{
ss[i].Current += ss[i].Weight;
total += ss[i].Weight; if (index == -1 || ss[index].Current < ss[i].Current)
{
index = i;
}
} ss[index].Current -= total;
return index;
}

  

        static void Main(string[] args)
{ var sv = new ServerConfig[] {
new ServerConfig{ Name="A",Weight=4},
new ServerConfig{ Name="B",Weight=2},
new ServerConfig{ Name="C",Weight=1}
}; int index = 0;
int sum = sv.Sum(m => m.Weight);
for (int i = 0; i < sum; i++)
{
index = NextServerIndex(sv);
Console.WriteLine("{0} {1}", sv[index].Name, sv[index].Weight);
} Console.Read();
}

  参考文献:http://blog.csdn.net/gqtcgq/article/details/52076997

文章出处:http://www.cnblogs.com/anech/p/6704240.html

转载请注名出处,谢谢!

最新文章

  1. Android轻量缓存框架--ASimpleCache
  2. android从资源文件中读取文件流显示
  3. MyEclipse导入jquery等文件报错的解决方案
  4. jQuery提升性能技巧及个人总结
  5. CSS/CSS3 如何实现元素水平居中
  6. 带参数的查询防止SQL注入攻击
  7. SQL Server 中的跨库视图
  8. HDU 5768 Lucky7(CRT+容斥原理)
  9. c语言中重要函数
  10. FZU 2168 防守阵地 I(前n项和的前n项和)
  11. EnablePrefetcher注册表项的修改与电脑提速
  12. Spring框架学习笔记(2)——IOC&amp;DI
  13. JavaScript入门学习笔记(表单验证)
  14. Kali学习笔记9:端口扫描详解(上)
  15. vue setTimeout 注销
  16. oracle中varchar2(2)存不了一个汉字的原因
  17. PyTorch学习系列(九)——参数_初始化
  18. LPC18xx/43xx SWD/JTAG Debug Connector
  19. zookeeper 伪分布式安装
  20. Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)

热门文章

  1. Graphite grafana
  2. mysql数据库基本知识,简单框架
  3. PHP 错误日志
  4. VC2005 warning C4819 消除方法
  5. python爬虫系列(1)——一个简单的爬虫实例
  6. 入参是小数的String,返回小数乘以100的String
  7. Spring-基于设置函数的依赖注入
  8. EditText把回车键变成搜索
  9. Spark2.0机器学习系列之6:GBDT(梯度提升决策树)、GBDT与随机森林差异、参数调试及Scikit代码分析
  10. sublime2常用设置