# algorythm for distributing items as evenly as possible while keeping original order • ### Question

• User2146470223 posted

Hi,

Sorry for possibly posting in the wrong forum but I don't know where to put this:

does anybody know if there is an algoryhtm to distribute items (numbers) of an array as evenly as possible while keeping the order of the items is a must.

Let's say I have 3 containers and I have numbers that equal 90.

• Each container should thus contain around 30, 30 being the maximum (but not necessarily if it's not possible because one of the numbers is higher than 30). But the total of each container should always be as close as possible to the limit (30) (means below or above that limit).
• Each container should contain at least 1 number.
• The initial order of the number must NOT be changed.

Examples:

Ex1:

array: 20, 10, 10, 10, 10, 5, 5, 30

Here it's quite easy:

c1 = 20, 10, 10 (=30)

c2 = 10, 10, 5, 5 (=30)

c3= 30 (=30)

Ex2:

array: 25, 10, 5, 10, 10, 5, 5, 30

Here it gets trickier:

either:

c1 = 25, 10 (=35)

c2 = 5, 10, 5, 5 (=25)

c3= 30 (=30)

or

c1 = 25 (=25)

c2 = 10, 5, 10, 5, 5 (=35)

c3= 30 (30)

Ex3:

array: 20, 40, 25, 2, 3

c1 = 20 (=20)

c2 = 40 (=40)

c3= 25, 2, 3 (=30)

Ex4:

array: 25, 40, 25, 2, 3

c1 = 25 (=25)

c2 = 40 (=40)

c3= 20, 2, 3 (=25)

Of course all these numbers are only examples. There could be 2 or more containers and the limit is always total of numbers in array divided by number of containers (rounded to next integer) and the numbers in the array are always integers.

I hope you get the point with my examples.

Regards,

Pascal

Tuesday, November 28, 2017 9:30 AM

• User-707554951 posted

Hi Translating-IT,

``` protected void Page_Load(object sender, EventArgs e)
{
//Ex1:
//int[] arry = { 20, 10, 10, 10, 5, 5, 30 };
//Ex2:
int[] arry = { 25, 10, 5, 10, 10, 5,5, 30 };
//Ex3:
//int[] arry = { 20, 40, 25, 2, 3 };
//Ex4:
//int[] arry = { 25, 40, 25, 2, 3 };
List<int> sumChaArry = new List<int>();

List<MyResult> myResultArry = new List<MyResult>();

for (int i = 0; i <= arry.Length - 3; i++)
{
int sum1 = getSum(0, i, arry);
// Debug.WriteLine("Here is sum1: "+ sum1);

int j = i + 1;

for (int m = j; m <= arry.Length - 2; m++)
{
int sum2 = getSum(i + 1, m, arry);
//  Debug.WriteLine("Here is sum2: " + sum2);

int k = m + 1;

int sum3 = getSum(k, arry.Length - 1, arry);
// Debug.WriteLine("Here is sum3: " + sum3);

Debug.WriteLine("i:" + i + " j: " + j + " m:" + m + "  k:" + k);
Debug.WriteLine("Here is sum1: " + sum1 + "  sum2: " + sum2 + "sum3: " + sum3);

int[] sums = { sum1, sum2, sum3 };
int sumCha = getSumCha(sums);

//Debug.WriteLine("here is get Sum Cha: " + getSumCha(sums));

myResultArry.Add(new MyResult { i = i, j = j, m = m, k = k, sum1 = sum1, sum2 = sum2, sum3 = sum3, sumCha = sumCha });

}
}
//int index= myResultArry.Min(a => a.sumCha);

//MyResult final = myResultArry[index];
int getMinCha = sumChaArry.Min();
MyResult final = myResultArry.Where(a => a.sumCha == getMinCha).FirstOrDefault();

// Debug.WriteLine("here is minCha result:"+ getMinCha);
Debug.WriteLine("here is minCha result:" + final.sumCha + " i: " + final.i + " j: " + final.j + " m: " + final.m + " k: " + final.k);

ToPrint(0, final.i, arry);

ToPrint(final.j, final.m, arry);

ToPrint(final.k, arry.Length - 1, arry);
}

public class MyResult
{
public int i { get; set; }
public int j { get; set; }
public int m { get; set; }
public int k { get; set; }
public int sum1 { get; set; }
public int sum2 { get; set; }
public int sum3 { get; set; }
public int sumCha { get; set; }

}

public int getSumCha(int[] sums)
{
int sumCha = 0;
for (int i = 0; i < sums.Length; i++)
{
sumCha += Math.Abs(sums[i] - 30);
}
return sumCha;
}
public void ToPrint(int index1, int index2, int[] arry)
{

for (int i = index1; i <= index2; i++)
{
Debug.Write(arry[i] + " ");

}
Debug.WriteLine("------------");

}

public int getSum(int index1, int index2, int[] arry)
{
int sum = 0;
for (int i = index1; i <= index2; i++)
{
Debug.Write(arry[i]);
sum += arry[i];
}
Debug.WriteLine("------------");
return sum;
}```

After enter F5 to run this page, the Output window as below: Best regards

Cathy

• Marked as answer by Thursday, October 7, 2021 12:00 AM
Wednesday, November 29, 2017 8:58 AM
• User2146470223 posted

Finally found the error:

I missed a tiny part further up the algorithm. See orange highlight:

```Dim divid As Integer

Public Function test() As String
Dim arry As Integer() = {2, 3, 50, 50, 45, 45}
Dim sumChaArry As List(Of Integer) = New List(Of Integer)()
Dim myResultArry As List(Of MyResult) = New List(Of MyResult)()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim n As Integer
Dim o As Integer
Dim p As Integer
Dim q As Integer
Dim r As Integer
Dim s As Integer

Dim sum1 As Integer
Dim sum2 As Integer
Dim sum3 As Integer
Dim sum4 As Integer
Dim sum5 As Integer
Dim sum6 As Integer
Dim sum7 As Integer
Dim sum8 As Integer

Dim x As Integer
Dim cont As Integer
cont = 4
divid = 23

Dim sums As Integer()
Dim sumCha As Integer

For i = 0 To arry.Length - cont
sum1 = getSum(0, i, arry)
j = i + 1
For k = j To arry.Length - 3
sum2 = getSum(i + 1, k, arry)
l = k + 1
For m = l To arry.Length - 2
sum3 = getSum(k + 1, m, arry)
n = m + 1
sum4 = getSum(n, arry.Length - 1, arry)
Response.Write("i:" & i & " j: " & j & " k:" & k & " l:" & l & " m:" & m)
Response.Write("<br>Here is sum1: " & sum1 & "  sum2: " & sum2 & "  sum3: " & sum3 & "  sum4: " & sum4 & "<br><br>")
sums = {sum1, sum2, sum3, sum4}
sumCha = getSumCha(sums)
myResultArry.Add(New MyResult With {.i = i, .j = j, .k = k, .l = l, .m = m, .n = n, .sum1 = sum1, .sum2 = sum2, .sum3 = sum3, .sum4 = sum4, .sumCha = sumCha})
Next
Next
Next

Dim getMinCha As Integer = sumChaArry.Min()
Dim final As MyResult = myResultArry.Where(Function(a) a.sumCha = getMinCha).FirstOrDefault()
Response.Write("<br><br>here is minCha result:" & final.sumCha & " i: " & final.i & " j: " & final.j & " k: " & final.k & " l: " & final.l & "<br>")
ToPrint(0, final.i, arry)
ToPrint(final.j, final.k, arry)
ToPrint(final.l, final.m, arry)
ToPrint(final.n, arry.Length - 1, arry)
Response.End()
End Function

Public Class MyResult
Public Property i As Integer
Public Property j As Integer
Public Property k As Integer
Public Property l As Integer
Public Property m As Integer
Public Property n As Integer
Public Property o As Integer
Public Property p As Integer

Public Property sum1 As Integer
Public Property sum2 As Integer
Public Property sum3 As Integer
Public Property sum4 As Integer
Public Property sum5 As Integer
Public Property sum6 As Integer
Public Property sum7 As Integer
Public Property sum8 As Integer

Public Property sumCha As Integer
End Class

Public Function getSumCha(ByVal sums As Integer()) As Integer
Dim sumCha As Integer = 0
For i As Integer = 0 To sums.Length - 1
sumCha += Math.Abs(sums(i) - divid)
Next

Return sumCha
End Function

Public Sub ToPrint(ByVal index1 As Integer, ByVal index2 As Integer, ByVal arry As Integer())
For i As Integer = index1 To index2
Response.Write(arry(i) & " ")
Next

Response.Write("-------------------<br>")
End Sub

Public Function getSum(ByVal index1 As Integer, ByVal index2 As Integer, ByVal arry As Integer()) As Integer
Dim sum As Integer = 0
For i As Integer = index1 To index2
Response.Write(arry(i) & " ")
sum += arry(i)
Next

Response.Write("-------------------<br>")
Return sum
End Function```

Now everything works.

This part of the answer is for 4 containers in VB. Cathy's one is valid for 3 containers in c#. You best use Telerik's converter to switch the function for the respective language.

From these 2 answers it'll be easier to change the algorithm to 5 or more containers. For me, right now, a function for n containers without setting a case or else if condition for each number of containers seems impossible. If anyone can come up with one, I would be glad to see the final function. ;)

Cheers,

Pascal

• Marked as answer by Thursday, October 7, 2021 12:00 AM
Thursday, December 21, 2017 8:06 PM

### All replies

• User-707554951 posted

Hi Translating-IT,

``` protected void Page_Load(object sender, EventArgs e)
{
//Ex1:
//int[] arry = { 20, 10, 10, 10, 5, 5, 30 };
//Ex2:
int[] arry = { 25, 10, 5, 10, 10, 5,5, 30 };
//Ex3:
//int[] arry = { 20, 40, 25, 2, 3 };
//Ex4:
//int[] arry = { 25, 40, 25, 2, 3 };
List<int> sumChaArry = new List<int>();

List<MyResult> myResultArry = new List<MyResult>();

for (int i = 0; i <= arry.Length - 3; i++)
{
int sum1 = getSum(0, i, arry);
// Debug.WriteLine("Here is sum1: "+ sum1);

int j = i + 1;

for (int m = j; m <= arry.Length - 2; m++)
{
int sum2 = getSum(i + 1, m, arry);
//  Debug.WriteLine("Here is sum2: " + sum2);

int k = m + 1;

int sum3 = getSum(k, arry.Length - 1, arry);
// Debug.WriteLine("Here is sum3: " + sum3);

Debug.WriteLine("i:" + i + " j: " + j + " m:" + m + "  k:" + k);
Debug.WriteLine("Here is sum1: " + sum1 + "  sum2: " + sum2 + "sum3: " + sum3);

int[] sums = { sum1, sum2, sum3 };
int sumCha = getSumCha(sums);

//Debug.WriteLine("here is get Sum Cha: " + getSumCha(sums));

myResultArry.Add(new MyResult { i = i, j = j, m = m, k = k, sum1 = sum1, sum2 = sum2, sum3 = sum3, sumCha = sumCha });

}
}
//int index= myResultArry.Min(a => a.sumCha);

//MyResult final = myResultArry[index];
int getMinCha = sumChaArry.Min();
MyResult final = myResultArry.Where(a => a.sumCha == getMinCha).FirstOrDefault();

// Debug.WriteLine("here is minCha result:"+ getMinCha);
Debug.WriteLine("here is minCha result:" + final.sumCha + " i: " + final.i + " j: " + final.j + " m: " + final.m + " k: " + final.k);

ToPrint(0, final.i, arry);

ToPrint(final.j, final.m, arry);

ToPrint(final.k, arry.Length - 1, arry);
}

public class MyResult
{
public int i { get; set; }
public int j { get; set; }
public int m { get; set; }
public int k { get; set; }
public int sum1 { get; set; }
public int sum2 { get; set; }
public int sum3 { get; set; }
public int sumCha { get; set; }

}

public int getSumCha(int[] sums)
{
int sumCha = 0;
for (int i = 0; i < sums.Length; i++)
{
sumCha += Math.Abs(sums[i] - 30);
}
return sumCha;
}
public void ToPrint(int index1, int index2, int[] arry)
{

for (int i = index1; i <= index2; i++)
{
Debug.Write(arry[i] + " ");

}
Debug.WriteLine("------------");

}

public int getSum(int index1, int index2, int[] arry)
{
int sum = 0;
for (int i = index1; i <= index2; i++)
{
Debug.Write(arry[i]);
sum += arry[i];
}
Debug.WriteLine("------------");
return sum;
}```

After enter F5 to run this page, the Output window as below: Best regards

Cathy

• Marked as answer by Thursday, October 7, 2021 12:00 AM
Wednesday, November 29, 2017 8:58 AM
• User2146470223 posted

ouch, forgot to add, that I need it in vb.net.

Converting to vb.net generates errors on getsum, getsumcha, toprint, myresult. -> doh, used the wrong online converter. with teleriks it worked.

So, if I got your code right, it is trying all possible solutions and then picking out the best one?

regards.

Pascal

Saturday, December 2, 2017 2:54 PM
• User2146470223 posted

Hi Cathy,

I just did some testing and it works as expected from what I saw.

But what when I don't know how many containers there will be, how many items there are in the main array or the approximate limit per container? The latter should normally be total of all numbers in main array (ArrayTotal) divided by number of containers (NumCont) thus ArrayTotal/NumCont.

For the number of items in the main array it seems the code would need no change as it worked well even if I added more items to the array. But what about the rest?

Just being curious: do you have a repository to consult for such algorithms or did you work it out by yourself? I would not even have known where to start.

Edit: for the time being a maximum of 8 containers would seems to be valid but there might be more needed in future. So it would be 2 to 8 containers.

Edit2: Ok, already found out where to change the limit per container. Still looking for some way to program the main function so that it would not matter how many containers there are.

Edit3: if it would not be possible to get a function for container = n, how would the above solution look like with 4 containers? That way I could at least construct the cases after 4 and implement them with an if then pattern for container = 3 to 8, hoping I'll not need more than 8 containers that soon.

regards,

Pascal

Saturday, December 2, 2017 10:37 PM
• User2146470223 posted

Hi Cathy,

This is my try to alter the function to 4 containers but it does not work at all:

```		For i = 0 To arry.Length - 4
sum1 = getSum(0, i, arry)
j = i + 1
For k = j To arry.Length - 3
sum2 = getSum(i + 1, k, arry)
l = k + 1
For l = k To arry.Length - 2
sum3 = getSum(l + 1, l, arry)
m = l + 1
sum4 = getSum(m, arry.Length - 1, arry)
Response.Write("i:" & i & " j: " & j & " k:" & k & " l:" & l & " m:" & m)
Response.Write("<br>Here is sum1: " & sum1 & "  sum2: " & sum2 & "  sum3: " & sum3 & "  sum4: " & sum4 & "<br>")
sums = {sum1, sum2, sum3, sum4}
sumCha = getSumCha(sums)
myResultArry.Add(New MyResult With {.i = i, .j = j, .k = k, .l = l, .m = m, .sum1 = sum1, .sum2 = sum2, .sum3 = sum3, .sum4 = sum4, .sumCha = sumCha})
Next
Next
Next```

PS: I removed the Dim parts from this code and declared all the variables further up, that way it gets easier to add more if then clauses for the different numbers of containers.

What did I miss?

I guess I made some mistake with the integers i, j, k, l or m.

Do I need to alter your code somewhere else than this part to get everything working?

Auntie Edit(h) says I forgot to greet. ;) :

Regards,

Pascal

Monday, December 4, 2017 11:13 PM
• User2146470223 posted

Hi,

I think I managed to get rid of most errors in the algorithm part for 4 containers but am not quite sure. One thing that for sure is still buggy is the ToPrint part. It does not show all the 4 result rows but only 3 what did I miss there?

```	Dim divid As Integer

Public Function test() As String
Dim arry As Integer() = {2, 3, 50, 50, 45, 45}
Dim sumChaArry As List(Of Integer) = New List(Of Integer)()
Dim myResultArry As List(Of MyResult) = New List(Of MyResult)()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim n As Integer
Dim o As Integer
Dim p As Integer
Dim q As Integer
Dim r As Integer
Dim s As Integer

Dim sum1 As Integer
Dim sum2 As Integer
Dim sum3 As Integer
Dim sum4 As Integer
Dim sum5 As Integer
Dim sum6 As Integer
Dim sum7 As Integer
Dim sum8 As Integer

Dim x As Integer
Dim cont As Integer
cont = 4
divid = 23

Dim sums As Integer()
Dim sumCha As Integer

For i = 0 To arry.Length - cont
sum1 = getSum(0, i, arry)
j = i + 1
For k = j To arry.Length - 3
sum2 = getSum(i + 1, k, arry)
l = k + 1
For m = l To arry.Length - 2
sum3 = getSum(k + 1, m, arry)
n = m + 1
sum4 = getSum(n, arry.Length - 1, arry)
Response.Write("i:" & i & " j: " & j & " k:" & k & " l:" & l & " m:" & m)
Response.Write("<br>Here is sum1: " & sum1 & "  sum2: " & sum2 & "  sum3: " & sum3 & "  sum4: " & sum4 & "<br><br>")
sums = {sum1, sum2, sum3, sum4}
sumCha = getSumCha(sums)
myResultArry.Add(New MyResult With {.i = i, .j = j, .k = k, .l = l, .m = m, .sum1 = sum1, .sum2 = sum2, .sum3 = sum3, .sum4 = sum4, .sumCha = sumCha})
Next
Next
Next

Dim getMinCha As Integer = sumChaArry.Min()
Dim final As MyResult = myResultArry.Where(Function(a) a.sumCha = getMinCha).FirstOrDefault()
Response.Write("<br><br>here is minCha result:" & final.sumCha & " i: " & final.i & " j: " & final.j & " k: " & final.k & " l: " & final.l & "<br>")
ToPrint(0, final.i, arry)
ToPrint(final.j, final.k, arry)
ToPrint(final.l, final.m, arry)
ToPrint(final.n, arry.Length - 1, arry)
Response.End()
End Function

Public Class MyResult
Public Property i As Integer
Public Property j As Integer
Public Property k As Integer
Public Property l As Integer
Public Property m As Integer
Public Property n As Integer
Public Property o As Integer
Public Property p As Integer

Public Property sum1 As Integer
Public Property sum2 As Integer
Public Property sum3 As Integer
Public Property sum4 As Integer
Public Property sum5 As Integer
Public Property sum6 As Integer
Public Property sum7 As Integer
Public Property sum8 As Integer

Public Property sumCha As Integer
End Class

Public Function getSumCha(ByVal sums As Integer()) As Integer
Dim sumCha As Integer = 0
For i As Integer = 0 To sums.Length - 1
sumCha += Math.Abs(sums(i) - divid)
Next

Return sumCha
End Function

Public Sub ToPrint(ByVal index1 As Integer, ByVal index2 As Integer, ByVal arry As Integer())
For i As Integer = index1 To index2
Response.Write(arry(i) & " ")
Next

Response.Write("-------------------<br>")
End Sub

Public Function getSum(ByVal index1 As Integer, ByVal index2 As Integer, ByVal arry As Integer()) As Integer
Dim sum As Integer = 0
For i As Integer = index1 To index2
Response.Write(arry(i) & " ")
sum += arry(i)
Next

Response.Write("-------------------<br>")
Return sum
End Function```

This would throw the following result:

2 -------------------
3 -------------------
50 -------------------
50 45 45 -------------------
i:0 j: 1 k:1 l:2 m:2
Here is sum1: 2 sum2: 3 sum3: 50 sum4: 140

50 50 -------------------
45 45 -------------------
i:0 j: 1 k:1 l:2 m:3
Here is sum1: 2 sum2: 3 sum3: 100 sum4: 90

50 50 45 -------------------
45 -------------------
i:0 j: 1 k:1 l:2 m:4
Here is sum1: 2 sum2: 3 sum3: 145 sum4: 45

3 50 -------------------
50 -------------------
45 45 -------------------
i:0 j: 1 k:2 l:3 m:3
Here is sum1: 2 sum2: 53 sum3: 50 sum4: 90

50 45 -------------------
45 -------------------
i:0 j: 1 k:2 l:3 m:4
Here is sum1: 2 sum2: 53 sum3: 95 sum4: 45

3 50 50 -------------------
45 -------------------
45 -------------------
i:0 j: 1 k:3 l:4 m:4
Here is sum1: 2 sum2: 103 sum3: 45 sum4: 45

2 3 -------------------
50 -------------------
50 -------------------
45 45 -------------------
i:1 j: 2 k:2 l:3 m:3
Here is sum1: 5 sum2: 50 sum3: 50 sum4: 90

50 45 -------------------
45 -------------------
i:1 j: 2 k:2 l:3 m:4
Here is sum1: 5 sum2: 50 sum3: 95 sum4: 45

50 50 -------------------
45 -------------------
45 -------------------
i:1 j: 2 k:3 l:4 m:4
Here is sum1: 5 sum2: 100 sum3: 45 sum4: 45

2 3 50 -------------------
50 -------------------
45 -------------------
45 -------------------
i:2 j: 3 k:3 l:4 m:4
Here is sum1: 55 sum2: 50 sum3: 45 sum4: 45

here is minCha result:103 i: 2 j: 3 k: 3 l: 4
2 3 50 -------------------
50 -------------------
45 -------------------
2 3 50 50 45 45 -------------------

The orange highlighted part is the result I would need to show at the end (here is minCha result: (just below the orange highlighted text)) but for some reason it does not show the line with the last 45. It should be:

here is minCha result:103 i: 2 j: 3 k: 3 l: 4
2 3 50 -------------------
50 -------------------
45 -------------------
45 -------------------

2 3 50 50 45 45 -------------------

Thanks for the help,

Pascal

Wednesday, December 20, 2017 12:31 PM
• User2146470223 posted

Finally found the error:

I missed a tiny part further up the algorithm. See orange highlight:

```Dim divid As Integer

Public Function test() As String
Dim arry As Integer() = {2, 3, 50, 50, 45, 45}
Dim sumChaArry As List(Of Integer) = New List(Of Integer)()
Dim myResultArry As List(Of MyResult) = New List(Of MyResult)()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim n As Integer
Dim o As Integer
Dim p As Integer
Dim q As Integer
Dim r As Integer
Dim s As Integer

Dim sum1 As Integer
Dim sum2 As Integer
Dim sum3 As Integer
Dim sum4 As Integer
Dim sum5 As Integer
Dim sum6 As Integer
Dim sum7 As Integer
Dim sum8 As Integer

Dim x As Integer
Dim cont As Integer
cont = 4
divid = 23

Dim sums As Integer()
Dim sumCha As Integer

For i = 0 To arry.Length - cont
sum1 = getSum(0, i, arry)
j = i + 1
For k = j To arry.Length - 3
sum2 = getSum(i + 1, k, arry)
l = k + 1
For m = l To arry.Length - 2
sum3 = getSum(k + 1, m, arry)
n = m + 1
sum4 = getSum(n, arry.Length - 1, arry)
Response.Write("i:" & i & " j: " & j & " k:" & k & " l:" & l & " m:" & m)
Response.Write("<br>Here is sum1: " & sum1 & "  sum2: " & sum2 & "  sum3: " & sum3 & "  sum4: " & sum4 & "<br><br>")
sums = {sum1, sum2, sum3, sum4}
sumCha = getSumCha(sums)
myResultArry.Add(New MyResult With {.i = i, .j = j, .k = k, .l = l, .m = m, .n = n, .sum1 = sum1, .sum2 = sum2, .sum3 = sum3, .sum4 = sum4, .sumCha = sumCha})
Next
Next
Next

Dim getMinCha As Integer = sumChaArry.Min()
Dim final As MyResult = myResultArry.Where(Function(a) a.sumCha = getMinCha).FirstOrDefault()
Response.Write("<br><br>here is minCha result:" & final.sumCha & " i: " & final.i & " j: " & final.j & " k: " & final.k & " l: " & final.l & "<br>")
ToPrint(0, final.i, arry)
ToPrint(final.j, final.k, arry)
ToPrint(final.l, final.m, arry)
ToPrint(final.n, arry.Length - 1, arry)
Response.End()
End Function

Public Class MyResult
Public Property i As Integer
Public Property j As Integer
Public Property k As Integer
Public Property l As Integer
Public Property m As Integer
Public Property n As Integer
Public Property o As Integer
Public Property p As Integer

Public Property sum1 As Integer
Public Property sum2 As Integer
Public Property sum3 As Integer
Public Property sum4 As Integer
Public Property sum5 As Integer
Public Property sum6 As Integer
Public Property sum7 As Integer
Public Property sum8 As Integer

Public Property sumCha As Integer
End Class

Public Function getSumCha(ByVal sums As Integer()) As Integer
Dim sumCha As Integer = 0
For i As Integer = 0 To sums.Length - 1
sumCha += Math.Abs(sums(i) - divid)
Next

Return sumCha
End Function

Public Sub ToPrint(ByVal index1 As Integer, ByVal index2 As Integer, ByVal arry As Integer())
For i As Integer = index1 To index2
Response.Write(arry(i) & " ")
Next

Response.Write("-------------------<br>")
End Sub

Public Function getSum(ByVal index1 As Integer, ByVal index2 As Integer, ByVal arry As Integer()) As Integer
Dim sum As Integer = 0
For i As Integer = index1 To index2
Response.Write(arry(i) & " ")
sum += arry(i)
Next

Response.Write("-------------------<br>")
Return sum
End Function```

Now everything works.

This part of the answer is for 4 containers in VB. Cathy's one is valid for 3 containers in c#. You best use Telerik's converter to switch the function for the respective language.

From these 2 answers it'll be easier to change the algorithm to 5 or more containers. For me, right now, a function for n containers without setting a case or else if condition for each number of containers seems impossible. If anyone can come up with one, I would be glad to see the final function. ;)

Cheers,

Pascal

• Marked as answer by Thursday, October 7, 2021 12:00 AM
Thursday, December 21, 2017 8:06 PM