`
lgstarzkhl
  • 浏览: 335463 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

C#平均分配代码

    博客分类:
  • net
阅读更多
对于一组数据array,平均分配成m组,要求每组的数量差不多。

思路:先对array数据进行排序,计算出可以分成n组。
      然后将array数据分成n组已经排序好的数据集合。
      将N组数据分正向赋值到M中,再反向赋值到M中,如此反复到结束。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace fenpei
{
    public class Person
    {
        public Person(string Name, int Capability)
        {
            this._name = Name;
            this._capability = Capability;
        }

        private string _name;
        private int _capability;
        
        public string Name
         {
             get { return _name; }
             set { _name = value; }
         }
         public int Capability
         {
             get { return _capability; }
             set { _capability = value; }
         }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person("NAME1", 201);
            Person p2 = new Person("NAME2", 233);
            Person p3 = new Person("NAME3", 189);

            Person p4 = new Person("NAME4", 198);
               Person p5 = new Person("NAME5", 164);
               Person p6 = new Person("NAME6", 181);
               Person p7 = new Person("NAME7", 212);
              Person p8 = new Person("NAME8", 205);
              Person p9 = new Person("NAME9", 192);
             Person p10 = new Person("NAME10", 241);
             Person p11 = new Person("NAME11", 136);
             Person p12 = new Person("NAME12", 201);
             Person p13 = new Person("NAME13", 142);
           Person p14 = new Person("NAME14", 127);
             Person p15 = new Person("NAME15", 189);
             Person p16 = new Person("NAME16", 221);
            List<Person> personList = new List<Person>();
             personList.Add(p1);
             personList.Add(p2);
             personList.Add(p3);
             personList.Add(p4);
             personList.Add(p5);
             personList.Add(p6);
             personList.Add(p7);
             personList.Add(p8);
             personList.Add(p9);
             personList.Add(p10);
             personList.Add(p11);
             personList.Add(p12);
             personList.Add(p13);
             personList.Add(p14);
             personList.Add(p15);
            // personList.Add(p16);
             Sort(personList, 3);
             Console.Read();
        }        

  /// <summary>
          /// 表示分组的作用
          /// </summary>
          /// <param name="personList">总人数列表</param>
          /// <param name="GroupCount">分组数量</param>
          static void Sort(List<Person> personList, int GroupCount)
          {
              if (GroupCount <= personList.Count)
              {
                  //先排序
                  personList.Sort(Compare);
                  //可以取的次数
                  int QU = Convert.ToInt32(personList.Count / GroupCount) + 1;
                 List<List<Person>> pList = new List<List<Person>>();
                 //排序后的数量
                 List<List<Person>> sortList = new List<List<Person>>();
                  //分组排序后的数据
                  for (int j = 0; j < QU; j++)
                  {
                      List<Person> getPerson = new List<Person>();
                      for (int i = 0; i < GroupCount; i++)
                      {
                          int index = 0;
                          if (j == 0)
                          {
                              index = i + j;
                          }
                          else
                          {
                              index = (j) * GroupCount + i;
                          }
                          if (index < personList.Count)
                          {
                              getPerson.Add(personList[index]);
                          }
                      }
                      if (getPerson.Count > 0)
                      {
                          sortList.Add(getPerson);
                      }
                  }
                  //开始分配
                  for (int j = 0; j < GroupCount; j++)
                  {
                      List<Person> listPerson = new List<Person>();
                      bool sort = true;
                      for (int i = 0; i < sortList.Count; i++)
                      {
                          //正向分
                          if (sort)
                          {
                              if (j < sortList[i].Count)
                              {
                                  listPerson.Add(sortList[i][j]);
                              }
                              sort = false;
                          }
                          else//反向分
                          {
                              if (GroupCount - (j + 1) < sortList[i].Count && GroupCount - (j + 1) >= 0)
                              {
                                 listPerson.Add(sortList[i][GroupCount - (j + 1)]);
                             }
                             sort = true;
                         }
                     }
                     if (listPerson.Count > 0)
                     {
                         pList.Add(listPerson);
                     }
                 }
                 int m = 0;
                 foreach (List<Person> lp in pList)
                 {
                     m++;
                     Console.Write("当前第" + m.ToString() + "组\r\n");
                     int totalCa = 0;
                     foreach (Person pp in lp)
                     {
                         totalCa = totalCa + pp.Capability;
                         Console.Write("能力:" + pp.Capability + "名字:" + pp.Name + "\r\n");
                     }
                     Console.Write("总能力:" + totalCa.ToString() + "\r\n");
                     Console.Write("结束\r\n");
                 }
             }
             else
             {
                 Console.Write("无法分组,分组数量大于总人数\r\n");
             }
         }
         public static int Compare(Person oPerson, Person nPerson)
         {
             if (oPerson == null)
             {
                 if (nPerson == null)
                 {
                     return 0;
                 }
                 else
                 {
                     return -1;
                 }
             }
             else
             {
                 if (nPerson == null)
                 {
                     return 1;
                 }
                 else
                 {
                     if (oPerson.Capability > nPerson.Capability)
                    {
                        return 1;
                     }
                     else if (oPerson.Capability == nPerson.Capability)
                     {
                         return 0;
                    }
                     else
                     {
                         return -1;
                     }
                 }
             }

        }
    }
}

分享到:
评论

相关推荐

    C# 排程演示系统含源代码

    【C# 排程演示系统含源代码】是一款基于C#编程语言和.NET框架开发的应用程序,主要用于模拟和理解日常工作的调度。这个项目不仅提供了一个直观的用户界面,还深入探讨了排程算法,这些算法在操作系统中用于高效地...

    c#编写的代码包括递归的排列和半数集,动态规划的导弹问题,贪心算法的找零钱问题

    在C#编程中,递归、动态规划和贪心算法是三种重要的问题解决策略,广泛应用于各种复杂的计算问题。下面将分别对这三个知识点进行详细解释。 1. **递归的排列与半数集问题** - **递归排列**:递归是一种函数自我...

    k-means算法的C#代码

    在这个场景中,我们关注的是一个实现了k-means算法的C#源代码。C#是一种面向对象的编程语言,广泛用于构建Windows桌面应用、Web应用以及游戏开发等,而且在数据处理和科学计算领域也有一定的应用。 首先,我们要...

    C#学生学籍管理系统源代码

    【C#学生学籍管理系统源代码】是一款专为初学者设计的学习项目,它利用Microsoft的Visual Studio 2008开发环境以及Access数据库技术来构建一个完整的管理学生的系统。这个项目不仅提供了实际的编程实践,同时也让...

    大学生综合测评系统 ASP C#代码

    【大学生综合测评系统 ASP C#代码】是一款基于ASP.NET技术和C#编程语言开发的应用程序,主要服务于高等教育机构,用于对学生进行全面、系统性的评价与考核。这个系统是作者在大学三年级进行课程设计时的作品,旨在...

    学生成绩管理c#源码

    此外,ORM(Object-Relational Mapping)框架如Entity Framework也可用于简化数据库操作,将数据库表映射为C#对象,实现代码的更高级抽象。 4. **窗体设计** Windows Forms是.NET Framework提供的一种用于创建桌面...

    C#实现k均值聚类算法(调试通过)

    本文将详细讨论如何使用C#语言来实现K均值聚类算法,并探讨其原理、步骤以及实际应用。 一、K均值算法原理 K均值算法基于迭代过程,旨在最小化每个簇内成员与簇中心的距离平方和。算法流程如下: 1. 初始化:选择...

    c#在线考试系统全部代码

    《C#在线考试系统全部代码详解》 在线考试系统,作为一种高效、便捷的教育评估工具,已经在现代教育领域中广泛应用。本压缩包提供的"C#在线考试系统"是开发者使用C#编程语言构建的一个完整的解决方案,它包含了从...

    C#宾馆管理系统源码

    前端可能使用ASP.NET MVC或ASP.NET Core MVC技术,后端则使用C#编写服务端代码,与数据库交互可能采用Entity Framework等ORM(对象关系映射)工具。 学习和研究这个C#宾馆管理系统源码,可以帮助开发者提升在C#编程...

    C#源代码-Dictionary键值对集合.zip

    `Dictionary, TValue&gt;`的工作原理基于哈希表,这使得它的查找、插入和删除操作通常可以在平均O(1)的时间复杂度内完成。其中,`TKey`表示键的类型,`TValue`表示值的类型。键必须是唯一的,而值可以重复。键和值之间...

    k-means算法C#实现

    C#代码示例可能如下: ```csharp class Point { public double[] Coordinates { get; set; } } class Cluster { public Point Centroid { get; set; } public List&lt;Point&gt; Points { get; set; } } class ...

    k-mean算法源代码C#版

    在给定的压缩包文件中,你将找到一个完整的C#项目,包括源代码、使用说明书以及示例调用代码,这些都是学习和理解k-means算法在C#环境下的实现方式的重要资源。通过研究这些文件,你可以深入理解算法的实现细节,并...

    C# 进程控制模拟

    每个进程在进入就绪队列后,按照其到达的先后顺序被分配CPU。这个算法公平且易于实现,但在处理短进程时可能会导致长进程等待时间过长,即饥饿问题。 2. **最优响应比算法(Priority Scheduling)**: 优先级调度...

    c#代码有查找,二叉树,链表,各种排序

    链表是一种动态数据结构,不像数组那样需要预先分配连续的内存空间。链表的每个节点包含数据和指向下一个节点的引用。C#中的LinkedList类提供了链表的相关操作。链表特别适合于频繁进行插入和删除操作的场景,因为...

    短作业优先算法代码(C#)

    在给定的代码中,SJF算法被用C#语言实现,主要包含了输入进程信息、选择下一个执行的进程以及计算相关时间参数等功能。 首先,`InPut`方法用于输入进程的相关数据。用户需要提供进程的个数,然后对于每个进程依次...

    微信小程序红包源代码

    3. 计算并分配红包金额,根据红包类型执行随机分配或平均分配。 4. 存储红包信息到数据库,包括红包状态(未领、已领)、领取人信息等。 5. 提供接口供前端查询红包状态和领取记录。 6. 实现安全性措施,如防止恶意...

    C#编程好习惯

    平均每15行代码进行一次断言检查,可以有效预防运行时错误。 #### 四、测试与异常处理 **9. 白盒测试** 确保代码的每一行都能通过白盒测试,这有助于发现潜在的逻辑错误和覆盖不足。 **10. 异常管理** 仅抛出已...

    C#图片颜色比例分布

    K-means聚类算法是一个常见的选择,它能将像素分配给最近的聚类中心,从而减少颜色的多样性。 最后,你可以将统计结果可视化,创建一个颜色直方图,展示不同颜色在图像中的分布。这通常使用柱状图完成,横轴代表...

    Bingo slot 离散差分 进化优化 RTP 和奖品分配_c#_代码_下载

    这个项目是基于C#编程语言实现的,它使用了一种名为“离散差分进化”的优化算法来调整游戏的RTP(Return to Player)率以及奖品分配策略。下面将详细探讨这些知识点。 首先,C#是一种广泛使用的面向对象的编程语言...

    学生成绩管理系统(C#+mysql)

    9. 报表和统计分析:系统可能还需要提供报表生成功能,展示学生的平均分、最高分、最低分、及格率等统计信息,帮助教师分析学生的学习情况。 综上所述,"学生成绩管理系统(C#+mysql)"结合了C#的编程能力和MySQL的...

Global site tag (gtag.js) - Google Analytics