У меня небольшая проблема с математикой или комбинаторикой в моем коде на 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 как сумма страниц.он может быть возвращен в виде строки на основе имени или идентификатора, например, 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 OK CFFFF = 10 + 5 +5 +5 +5 = 30 Ok и т. Д.
У меня нет идеи для лучшего способа создания циклов для этого, и я помещаю записи в список. Большое спасибо за каждую попытку помочь мне.