【发布时间】:2015-01-20 23:37:00
【问题描述】:
所以我是 C# 新手,我有这个任务:
我有一份不明人数的名单(例如 5 人)。任务是获取列表中的人和他之后的人不能在同一组中的人的组。
前: 5人
{1},{2},{3},{4},{5},{1,3},{1,4},{1,5},{2,4},{2, 5},{3,5},{1,3,5}
我使用了链接中的组合方法 http://www.codeproject.com/Articles/26050/Permutations-Combinations-and-Variations-using-C-G 我有这个代码
private void button3_Click(object sender, EventArgs e)
{
outputBox.Clear();
int nr = Convert.ToInt32(nmbrBox.Value);
double tmp = Math.Pow(2, nr);
double combs = tmp - 1;
List<int> list = new List<int>();
for (int i = 1; i <= nr; i++ )
{
list.Add(i);
}
outputBox.AppendText(combs.ToString() + " combinari\n\n");
List<string> allCombinations = new List<String>();
for (int i = 1; i <= list.Count; i++)
{
var combis = new Facet.Combinatorics.Combinations<int>(list, i, Facet.Combinatorics.GenerateOption.WithoutRepetition);
allCombinations.AddRange(combis.Select(c => string.Join("", c)));
}
foreach (var combi in allCombinations)
{
outputBox.AppendText(combi + "\n");
}
}
如何让它只显示我想要的结果?
【问题讨论】:
-
你试过什么?您如何过滤组合以确定合法值?
-
我已经尝试从“allCombinations”中获取组合,所以我可以使用变量并检查 number[i+1]=number[i]+1。
标签: c#