【发布时间】:2014-03-19 20:41:56
【问题描述】:
我有这个代码:
ArrayList arrayA = new ArrayList();
ArrayList arrayB = new ArrayList();
ArrayList arrayC = new ArrayList();
ArrayList arrayD = new ArrayList();
ArrayList arrayE = new ArrayList();
ArrayList arrayF = new ArrayList();
ArrayList arrayG = new ArrayList();
ArrayList arrayH = new ArrayList();
ArrayList arrayI = new ArrayList();
ArrayList arrayJ = new ArrayList();
int n = 0;
for (decimal a = 0.1m; a <= 100m; a += 0.1m)
{
for (decimal b = 100m - a; b > 0m; b -= 0.1m)
{
for (decimal c = 100m - b; c > 0m; c -= 0.1m)
{
for (decimal d = 100m - c; d > 0m; d -= 0.1m)
{
for (decimal e = 100m - d; e > 0m; e -= 0.1m)
{
for (decimal f = 100m - e; f > 0m; f -= 0.1m)
{
for (decimal g = 100m - f; g > 0m; g -= 0.1m)
{
for (decimal h = 100m - g; h > 0m; h -= 0.1m)
{
for (decimal i = 100m - h; i > 0m; i -= 0.1m)
{
for (decimal j = 100m - i; j > 0m; j -= 0.1m)
{
if ((a + b + c + d + e + f + g + h + i + j) == 100)
{
++n;
arrayA.Add(a);
arrayB.Add(b);
arrayC.Add(c);
arrayD.Add(d);
arrayE.Add(e);
arrayF.Add(f);
arrayG.Add(g);
arrayH.Add(h);
arrayI.Add(i);
arrayJ.Add(j);
}
}
}
}
}
}
}
}
}
}
}
任何想法如何优化这个?这需要很长时间才能执行。
基本上需要知道0.1到100之间的10个数字的组合数,其中它们的总和正好是100。(我需要知道组合的数量和组合本身)
提前致谢
【问题讨论】:
-
你为什么要使用
ArrayList?你有没有考虑过你要尝试多少种组合?您惊讶需要很长时间吗? -
不,我并不感到惊讶。为什么我使用 ArrayList?我不知道,只是因为是的,如果你有任何想法告诉我,因为我今天想不起来了,谢谢
-
您的操作看起来内存不足。您将
a数百万次添加到arrayA 中真的是有意的吗?删除数组添加并让它计算n。完成。 -
我只需要知道总和等于100的组合和组合的数量。使用数组列表,我可以通过每个数组列表中的记录ID看到,每个ID代表一个组合ArrayLists,但我确信有更好的方法......
-
另外,如果我没记错的话(已经有一段时间了......),你在 4.02 * 10^2568 测试附近。
标签: c# algorithm optimization