我有两个列表值
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#中应用它。需要最好的方法来做到这一点。 请帮忙。谢谢。
答案 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中涉及的所有步骤。