gpt4 book ai didi

c# - 找到总和为一个数字的所有组合

转载 作者:行者123 更新时间:2023-11-30 23:10:37 24 4
gpt4 key购买 nike

给定一个正整数n,求和为n的所有正整数集合

so 4 would be 
1 1 1 1
2 1 1
3 1
2 2

我认为这产生了正确的数字,但我不知道如何打包结果。

public static IEnumerable<List<int>> BreakMeDown(int n)
{
for (int i = 1, j = n - 1; i <= j; i++, j--)
{
List<int> breakMeDown = new List<int>();
breakMeDown.Add(i);
breakMeDown.Add(j);
yield return breakMeDown;
//Debug.WriteLine($"{i} {j}");
foreach (List<int> li in BreakMeDown(i))
yield return li;
foreach (List<int> li in BreakMeDown(j))
yield return li;
}
}

// test
foreach (List<int> li in BreakMeDown(7))
Debug.WriteLine(string.Join(", ", li));

最佳答案

我认为您正在寻找这个(现在无法测试它,所以我不能 100% 肯定它会按预期工作):

public static IEnumerable<List<int>> BreakMeDown(int n)
{
for (int i = 1, j = n - 1; i <= j; i++, j--)
{
List<int> breakMeDown = new List<int>();
breakMeDown.Add(i);
breakMeDown.Add(j);
yield return breakMeDown;

foreach (List<int> li in BreakMeDown(i))
yield return breakMeDown.Skip(1)
.Concat(li)
.ToList();

if (i != j)
{
foreach (List<int> li in BreakMeDown(j))
yield return breakMeDown.Take(1)
.Concat(li)
.ToList();
}
}
}

构建递归分解时,您需要将结果连接到已构建的 2 因子分解,忽略您要进一步分解的因子。

关于c# - 找到总和为一个数字的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45268774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com