应用情景是这样的:假设一个学校要组织学生参加一个活动,学生自己可以决定是否参与该活动,所有参与者将被随机分配一个异性学生做搭档,要求根据全体学生的数据来算出一个分配名单列表。(由于男女数量可能不同,允许有剩余)学生类
属性:int 学号,string 姓名,bool 性别,bool 是否参加活动活动名单类
属性:int 学号1,int 学号2现在假设拥有一个学生对象的集合:List<学生> 学生列表要求根据学生列表进行随机配对,将结果存储到活动名单对象中,装入活动名单对象集合:List<活动名单> 活动名单表如果你不擅长用List<>的话,使用数组也是可以的,主要是算法,一定要求高效。在此先谢谢大家了!另外顺便问一下,对于这种情况的应用算法,有没有什么学名及技术资料呢?
PS:我分不多了,只能节省着给了~~“(0--85) ”×_×咋挣分涅~?~
属性:int 学号,string 姓名,bool 性别,bool 是否参加活动活动名单类
属性:int 学号1,int 学号2现在假设拥有一个学生对象的集合:List<学生> 学生列表要求根据学生列表进行随机配对,将结果存储到活动名单对象中,装入活动名单对象集合:List<活动名单> 活动名单表如果你不擅长用List<>的话,使用数组也是可以的,主要是算法,一定要求高效。在此先谢谢大家了!另外顺便问一下,对于这种情况的应用算法,有没有什么学名及技术资料呢?
PS:我分不多了,只能节省着给了~~“(0--85) ”×_×咋挣分涅~?~
这个是我的思路,我没验证,应该不会超过3秒吧.//假设all为存放所有学生的类
List<学生> man=new List<学生>();//存放男学生类
List<学生> woman=new List<学生>();//存放女学生类
List<学生> temp1=null;
List<学生> temp2=null;List<学生清单> listStudent=new List<学生清单>();
学生清单 stduentList=null;System.Random random=new System.Random();foreach(学生 st in all){
if(st.参加){
if(st.性别){//男学生
man.add(st);
}
else{
woman.add(st);
}
}
}if(man.Length<woman.Length){
temp1=man;
temp2=woman;
}
else
{
temp1=woman;
temp2=man;
}int index=0;for(学生 stduent in temp1)
{
studentList=new 学生清单();
index=random.next(temp2.Length);//根据temp2的长度获得随机索引
studentList.学号1=student.学号;
studentList.学号2=temp2[index].学号;
listStudent.Add(studentList);
temp2.RemoveAt(index);//从List中删除已经配对的学生
}foreach(学生清单 sl in listStudent)
{
System.Console.WriteLine(sl.ToString());
}
intotheland() 应该是一个比较好的思路,万条运算的话应当不足1秒,我回头测试一下,谢谢你。