Divide an integer into groups with C#
November 3, 2015 2 Comments
Say you’d like to divide an integer, e.g. 20, into equal parts of 3 and distribute any remainder equally across the groups. The result of such an operation would be the following 3 integers:
7,7,6
20 can be divided into 3 equal parts of 6 and we have a remainder of 20 – 6 * 3 = 2. 2 is then added as 1 and 1 to the first two groups of 6. The result is a more or less equal distribution of the start integer.
The following function will perform just that:
public static IEnumerable<int> DistributeInteger(int total, int divider)
{
if (divider == 0)
{
yield return 0;
}
else
{
int rest = total % divider;
double result = total / (double)divider;
for (int i = 0; i < divider; i++)
{
if (rest-- > 0)
yield return (int)Math.Ceiling(result);
else
yield return (int)Math.Floor(result);
}
}
}
Call it as follows:
List<int> test = DistributeInteger(20, 3).ToList();
“test” will include 7,7,6 as expected.
View all various C# language feature related posts here.
Pingback: Divide an integer into groups with C# | .NET developpement
please give code in VB.NET for distributing the integer in equal parts