平均分配的实现

复制代码
protected void Button2_Click(object sender, EventArgs e)
{
    List<string> persons = new List<string>();
    Dictionary<string, List<string>> result = new Dictionary<string, List<string>>();
    
    //初始化数据
    string[] itemList = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K" };
    int m = 4; //任务数
    int n = 3; //分配人数
    
    //随机初始化一下
    
    List<string> itemListTemp = new List<string>();
    long tick = DateTime.Now.Ticks;
    Random r = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));//保证生成随机数重复率很低
    
    while (itemListTemp.Count < m)
    {
        int j = r.Next(m);
        string s = itemList[j];
        
        if (itemListTemp.Count > 0)
        {
            while (itemListTemp.Contains(s))
            {
                j = r.Next(m);
                s = itemList[j];
            }
        }
        itemListTemp.Add(s);
    }
    
    for (int j = 0; j < n; j++)
    {
        string t = (j + 1).ToString().PadLeft(12, '0');
        
        persons.Add(t);
        result.Add(t, new List<string>());
        
    }
    
    //算法
    
    int iAv = m / n == 0 ? 1 : m / n;
    int iMod = m % n;
    int i = 0;
    
    
    
    foreach (string k in result.Keys)
    {
        if (itemListTemp.Count == 0) break;
        result[k].AddRange(itemListTemp.GetRange(0, iAv));
        
        if (i == result.Keys.Count - 1 && itemListTemp.Count / n < 2)
        {
            result[k].AddRange(itemListTemp.GetRange(iAv, itemListTemp.Count - iAv));
        }
        
        itemListTemp.RemoveRange(0, iAv);
        i++;
        this.ListBox1.Items.Add(k + ":" + result[k].Count + "-->" + String.Join(",", result[k].ToArray()));
        //Console.WriteLine("{0}:{1}-->{2}", k, result[k].Count, String.Join(",", result[k].ToArray()));
    }
    
    ////
    
    
    //int iAverage = m / n;
    //int iMod = m % n;
    
    //foreach (string k in result.Keys)
    //{
    //    //int m = 4; //任务数
    //    //int n = 3; //分配人数
    
    //    result[k].AddRange(itemListTemp.GetRange(0, 1));
    
    //    if ((4 - 1) != 0 && (4 - 1) / n == 0)
    //    {
    
    //    }
    
    //    result[k].AddRange(itemListTemp.GetRange(0, iAverage));
    //    if (itemListTemp.Count - iAverage != 0 && (itemListTemp.Count - iAverage) / n == 0)
    //    {
    //        result[k].AddRange(itemListTemp.GetRange(iAverage, itemListTemp.Count - iAverage));
    
    //    }
    
    
    //    this.ListBox1.Items.Add(k + ":" + result[k].Count + "-->" + String.Join(",", result[k].ToArray()));
    
    //    itemListTemp.RemoveRange(0, iAverage);
    //}
}
复制代码

 

posted @   CoderWayne  阅读(343)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示