2013-06-21 68 views
-4

我有三个数组:添加了小数阵列

[0, 0, 2.5, 2.5, ] 
[0, 0.5, 0, 0,] 
[0, 2.0, 0, 0, ] 

我找过他们所有的算法循环,并将其添加到第一阵列,只有当我们能够实现的,该指数相同的值数组(在这种情况下为2.5),删除它们,如果它们被添加,并省略所有其他不合适的数组(例如[0,0,0,0.001]),我甚至无法开始围绕这个包围我的头部,对我来说棘手的部分是识别两个(或更多)其他阵列的组合是否可以填充第一个阵列。例如,如果我们将[0,0.5,0,0,0]加到[0,0,2.5,2.5,],我们得到[0,0.5,2.5,2.5,]和最后一个相同的值,所以该方法应该能够检测到并将它们添加到第一个并删除它,留下任何“不可能”的数组。

+6

你能清楚吗? – Tilak

+0

对不起,如果我有点不清楚,我已经更新了这个问题,现在好了吗? – user2498443

+1

你说'[0,0,0,.001]'不适合,但这个数组也有4个元素并且有十进制值。它不适合? – unlimit

回答

0
var arraysToBeAdded = new List<decimal[]>(); 
const int numberOfElementsPerArray = 4; 

arraysToBeAdded.Add(new decimal[numberOfElementsPerArray]{ 0.0M, 0.0M, 0.0M, 0.0M}); 
arraysToBeAdded.Add(new decimal[numberOfElementsPerArray]{ 4.1M, 3.1M, 2.1M, 1.1M}); 
arraysToBeAdded.Add(new decimal[numberOfElementsPerArray]{ 1.1M, 1.1M, 1.1M, 1.1M}); 

for(int j = 1; j < arraysToBeAdded.Count; ++j){ 
    for(int i = 0; i < 4; i++){ 
     arraysToBeAdded[0][i] += arraysToBeAdded[j][i]; 
     arraysToBeAdded[j][i] = 0; 
    } 
} 

您可以更改阵列中包含的类型,我选择float但它可以是任何东西。 您也可以更改数组中包含的项目数量。

最后,我使用List来包含数组,但没有说明列表中包含的数组必须具有4的大小,这是您的责任。

+0

不,你不能只选择数字的类型。看起来数字确实是小数,这意味着你的代码(使用'float')在某些情况下不会给出正确的结果。 – svick

+0

如果我只是将声明更改为小数而不是float,该怎么办?这会起作用吗?我并不真正意识到差异。编辑:我刚刚读过这篇文章,我认为它是对它的总结,对于那些想知道的人也是如此。 http://stackoverflow.com/a/618542/505810 – Pacane

+0

是的,这应该工作(假设你也将所有文字从'f'改为'm')。如果你不知道其中的差异,那么在做这件事时你应该非常小心,尤其是在需要严格平等的情况下。 – svick