请教一个分组算法

hb9191 2011-01-12 01:21:00
数据:从A到Z,每个字母对应有若干数量。
A,1234
B,5677
......
Z,11787

现在要把A-Z分为N组(N为参数,不定,可为2、3、4),每组合计基本相同(可以有较小的差距),返回每组的字母组成。

谢谢
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hb9191 2011-01-20
  • 打赏
  • 举报
回复
几天前做完了。算法简单,就是想找到技术上简单些的实现方法。
q107770540 2011-01-12
  • 打赏
  • 举报
回复


void Main()
{
int groupNum=3; //平均分成3组
var list=Enumerable.Repeat("A",10);
list=list.Concat(Enumerable.Repeat("B",20));
list=list.Concat(Enumerable.Repeat("C",30));
list=list.Concat(Enumerable.Repeat("D",40));
list=list.OrderBy(l=>Guid.NewGuid());
int avgNum=(int)list.Count()/3;
var result=new List<List<string>>();
for(int i=0;i<groupNum;i++)
{
if(i+1==groupNum)
{
result.Add(list.Skip(avgNum*i).ToList());
}
else
{
result.Add(list.Skip(avgNum*i).Take(avgNum).ToList());
}
}
for(int i=0;i<result.Count;i++)
{
Console.WriteLine("第 "+(i+1)+"组: 共计"+result[i].Count+"个");
result[i].ForEach(r=>Console.WriteLine(r));
Console.WriteLine("************");
}

/*
第 1组: 共计33个
C
A
B
D
C
C
B
C
A
C
D
C
B
D
C
C
C
A
D
B
C
D
D
C
B
C
D
D
C
D
B
C
D
************
第 2组: 共计33个
D
B
D
B
C
D
A
C
D
D
C
C
B
C
D
C
C
B
A
C
B
C
D
B
C
B
D
B
A
A
D
D
A
************
第 3组: 共计34个
B
D
A
B
C
D
B
D
C
B
C
C
C
D
B
C
C
C
A
D
A
D
C
D
D
B
D
D
C
B
A
A
B
B
************

*/
}

wuyq11 2011-01-12
  • 打赏
  • 举报
回复
分组求和
DataTable dt=new DataTable();
IEnumerable<DataRow> query =from t in dt.AsEnumerable()
group t by t.Field<int>("id")
into s
select new
{
sum=s.Sum(m=>m.Field<int>("age")),
s.Key
};
加油馒头 2011-01-12
  • 打赏
  • 举报
回复
分组 求和 计算相等
vrhero 2011-01-12
  • 打赏
  • 举报
回复
A-Z才26个,先SUM/N求平均值再对数量排序循环求和就可以了...

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧