【发布时间】:2019-09-07 11:43:49
【问题描述】:
我的 C# 代码中有数学或组合学方面的小问题。我不知道怎么写这个最简单的。
我有一个类 Section 和 TestClass 但没有返回预期结果的方法。
public class Section
{
public int Id { get; set; }
public int Pages { get; set; }
public string Name { get; set; }
}
[TestFixture]
public class PermutatorTest
{
private IList<Section> _sections;
private int _targetPage;
[SetUp]
public void SetUp()
{
_targetPage = 30;
_sections = new List<Section>
{
new Section {Id = 1, Pages = 15, Name = "A"},
new Section {Id = 2, Pages = 15, Name = "B"},
new Section {Id = 3, Pages = 10, Name = "C" },
new Section {Id = 4, Pages = 10, Name = "D"},
new Section {Id = 5, Pages = 10, Name = "E"},
new Section {Id = 6, Pages = 5, Name = "F"}
};
}
[Test]
public void GetPermutationsTest()
{
// Code to return list of all combinations
}
}
我想得到每个组合,总页数为 30。 它可以根据名称或 Id 作为字符串返回,例如 AA 或 11 、 AB 或 12 当然,顺序并不重要(AB和BA是一样的......CCD和CDC和DCC也是)
最终结果应如下所示:(30 个正确结果)
AA
AB
ACF
ADF
AEF
AFFF
BB
BCF
BDF
BEF
BFFF
CCC
CCD
CCE
CDD
CEE
CDE
CFFFF
CDFF
CCFF
CEFF
DDFF
DEFF
DFFFF
DDD
DDE
EFFFF
EEE
EEFF
FFFFFF
例如DDE = 10+10+10 = 30 正常 CFFFF = 10 + 5 +5 +5 +5 = 30 好 等等
我不知道为此创建循环并将记录放入列表的最佳方法 非常感谢您每次尝试帮助我。
【问题讨论】:
-
递归应该更容易,而不是循环
-
我认为应该有 31 个结果 - 为什么 DEE (10+10+10) 不在您的列表中?
-
事实上 .. DEE 也是 :) 我也尝试通过递归来制作一些东西。
标签: c# loops conditional-statements permutation