如何比较两个列表值并将它们舍入到第一个列表值而不在内部添加它们

时间:2018-02-08 05:18:05

标签: c# .net algorithm linq

我有两个列表值

Example:
first list total 285, second list total 220

first List values:
x1 = 55
x2 = 105
x3 = 100
x4 = 25

second List values:
y1 = 25
y2 = 25
y3 = 50
y4 = 120

如果第二列表值y1(25)不等于第一列表值x1(55)。然后应该比较第二个列表y1,它应该从y2借用25变为55。 仍然y1缺少5成为55.所以它从y3借了5。然后

 y1 = 25, 25, 5  (total is 55).
    y2 = 0
    y3 = 45
    y4 = 120

现在再次y2需要用x2舍入为105.所以最终值在下面,不应该添加部分。他们需要像个人一样(25,     25,5)在第二列表y1中作为单独的集合或列表。现在

y1 = 25, 25, 5  ->(total is 55)
y2 = 45 , 60 (45 shifts from y3 & 60 shifts from y4)
y3 = 60 (balance in y4 shifts to y3 subtracted from y4(120))
y4 = 0

Link here 同样的情况如果第二个列表y1是75那么额外的20应该被带到y2,y3,依此类推。 如何在C#中应用它。需要最好的方法来做到这一点。  请帮忙。谢谢。

2 个答案:

答案 0 :(得分:2)

添加第二个列表中的所有数字,表示总计。 并且对于第二个列表中的每个元素,通过从总计中减去第一个列表中的相同值,剩余的总数将转到第二个列表中的最后一个元素。

这里总数= 220,y1 = 220-55(总数= 165)=,y2 = 165-105(总数= 60),y3 = 60-50(总数= 10),y4 = 10

答案 1 :(得分:1)

在了解您的要求后,我提出了以下代码。希望这可以帮助。请试一试。

int[] x = new int[] {55, 105, 100, 25};
int[] y = new int[] {25, 25, 50, 120};
List<int>[] r = new List<int>[]{new List<int>(), new List<int>(), new List<int>(), new List<int>()};

for(int i = 0; i < x.Count(); i++){
    if (x[i] < y[i]) {
        y[i+1] = y[i] - x[i];
        y[i] = x[i];
        r[i].Add(y[i]);
    } else if (x[i] > y[i]) {
        r[i].Add(y[i]);
        for (int j = i + 1; j < y.Count(); j++){
            if (x[i] == y[i] + y[j]) {
                y[i] = x[i];
                y[j] = 0;
                r[i].Add(y[j]);
                break;
            } else if(x[i] > y[i] + y[j]) {
                y[i]+=y[j];
                r[i].Add(y[j]);
                y[j]=0;
            } else {
                y[j] = y[i] + y[j] - x[i];
                r[i].Add(x[i]-y[i]);
                y[i] = x[i];
                break;
            }
        }
    } else {
        r[i].Add(y[i]);
    }
}

Console.WriteLine(string.Join(", ", y));
for(int i = 0; i < r.Count(); i++){
    Console.WriteLine(string.Join(", ", r[i]));
}

这将为每个y存储r中涉及的所有步骤。