• Status: Solved
• Priority: Medium
• Security: Public
• Views: 472

# Create an Array of Random Numbers whose sum is < X

How would I go about creating a 1 dimensional array with N elements,
whose sum < X?

thx
0
JustinW
• 3
• 3
1 Solution

Author Commented:
and the random numbers are integers between
0 and Z
0

Software EngineerCommented:
See attached code
``````public int[] GetRandomArray(int max, int sumMax, int size)
{
Debug.Assert(sumMax >= max, "Invalid usage");
Debug.Assert(max > 0, "Invalid usage");
Debug.Assert(size > 0, "Invalid usage");
Random r = new Random();
List<int> result = new List<int>(size);
int sum = 0;
for (int i = 0; i < size; i++)
{
result[i] = r.Next(max+1);
sum = result[i] + sum;
}
while (sum > sumMax)
{
sum = 0;
for (int i = 0; i < size; i++)
{
if (result[i] > 0)
result[i] = result[i] > 0 ? (result[i] - 1): 0;
}
}
return result.ToArray();
}
``````
0

Software EngineerCommented:
where maxSum = X
maxValue=Z
size=N
``````public int[] GetRandomArray(int maxValue, int maxSum, int size)
{
Debug.Assert(maxSum >= maxValue, "Invalid usage");
Debug.Assert(maxValue > 0, "Invalid usage");
Debug.Assert(size > 0, "Invalid usage");
Random r = new Random();
List<int> result = new List<int>(size);
int sum = 0;
for (int i = 0; i < size; i++)
{
result[i] = r.Next(0,maxValue);
sum = result[i] + sum;
}
while (sum > maxSum)
{
sum = 0;
for (int i = 0; i < size; i++)
{
if (result[i] > 0)
result[i] = result[i] > 0 ? (result[i] - 1): 0;
}
}
return result.ToArray();
}
``````
0

Author Commented:
very nice;
danke
0

Author Commented:
Here's my crack at it in ruby
``````def rnd_rng(leng, the_max)
arr = Array.new(leng){0}
the_max = rand(the_max)

i = 0
while the_max > 0 && i <leng do
tmp = rand(the_max)
arr[i] = tmp
the_max = the_max - tmp
i +=1
end

return arr.shuffle!
end
``````
0

Software EngineerCommented:
and vb.net version is:
``````Public Function GetRandomArray(maxValue As Integer, maxSum As Integer, size As Integer) As Integer()
Debug.Assert(maxSum >= maxValue, "Invalid usage")
Debug.Assert(maxValue > 0, "Invalid usage")
Debug.Assert(size > 0, "Invalid usage")
Dim r As New Random()
Dim result As New List(Of Integer)(size)
Dim sum As Integer = 0
For i As Integer = 0 To size - 1
result(i) = r.[Next](0, maxValue)
sum = result(i) + sum
Next
While sum > maxSum
sum = 0
For i As Integer = 0 To size - 1
If result(i) > 0 Then
result(i) = If(result(i) > 0, (result(i) - 1), 0)
End If
Next
End While
Return result.ToArray()
End Function
``````
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.