【发布时间】:2014-05-13 15:22:49
【问题描述】:
所以我有一个长度可变的 ulong 素数列表。
例如:2,5,7,3
我想创建每个相乘组合,不包括所有相乘的数字。 (在这种情况下为 2*5*7*3)。
例如:2,3,5,6,7,10,14,15,21,30,35,42,70,105。
我尝试了几个使用“foreach”循环的解决方案,但我似乎无法理解。似乎太容易了。什么可能是解决此问题的有效方法?
我遇到的主要问题是,当我向列表中添加新值时,“foreach”循环会导致错误,因为我对其进行了更改。除了做一大堆新列表之外,我想不出办法解决这个问题。在我看来,应该有一个非常简单、干净的解决方案,但我只是过于复杂了。
我尝试了“构建”逼近,将基本因子相乘,以创建更大的因子等等,而“构建”逼近,从大数开始,然后将其分解(如我的例子)。这是我尝试过的:
List<ulong> c, f;
ulong i;
//Some code then sets c to the factors (2, 3, 5, and 7)
//i is then set to the c set multiplied together (2*3*5*7)
//if the c is a factor, divide and add it to the new list f (the final list)
foreach (ulong u in c)
{
if (i % u == 0)
{
f.Add(i/u);
Console.WriteLine(i / u);
}
}
// Keep on dividing the numbers down, until you get the original factors added to the list
for (int j = 0; j < f.Count -1; j++)
{
foreach (ulong u in c)
{
foreach (ulong v in f)
{
if (v % u == 0)
{
if (v / u != 1 && !f.Contains(v / u))
{
f.Add(v / u);
}
}
}
}
}
带输入的预期输出 (2 5 7 3):
- 2
- 5
- 3
- 7
- 2 * 3 = 6
- 2 * 5 = 10
- 2 * 7 = 14
- 5 * 7 = 35
- 5 * 3 = 15
- 7 * 3 = 21
- 2 * 5 * 7 = 70
- 2 * 5 * 3 = 30
- 2 * 3 * 7 = 42
- 5 * 7 * 3 = 105
【问题讨论】:
-
这不是“解决我的家庭作业”问题的好地方。请先向我们展示您迄今为止所做的尝试。请记住,按几次 Enter 按钮可以让您的问题更具可读性。
-
它的爱好编程......我会添加一些例子。
-
听起来递归的解决方案是可行的......在寻求帮助之前自己尝试一下。
-
我不明白您所说的“除了所有数字组合(在这种情况下为 2*5*7*3)”是什么意思。
-
抱歉,这意味着 2*5*7*3 (210) 已从列表中排除,但所有其他组合都有效
标签: c#