Random list of M non-negative integers whose sum is N
Given two integers M and N, the task is to create a list of M non-negative integers whose sum is N. In case when more than one list is possible, find any one.
Examples:
Input: M = 4, N = 8
Output: 1 3 3 1
1 + 3 + 3 + 1 = 8
Input: M = 5, N = 3
Output: 0 1 1 0 1
Approach: To get a complete random list of integers, create an array of size M where every element is initialised with 0. Now run a loop from 0 to N – 1 and increment any randomly chosen element from the array by 1 using the rand() function. This way, sum of the resultant list will be N.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printArr( int arr[], int n)
{
for ( int i = 0; i < n; i++)
cout << arr[i] << " " ;
}
void randomList( int m, int n)
{
int arr[m] = { 0 };
srand ( time (0));
for ( int i = 0; i < n; i++) {
arr[ rand () % m]++;
}
printArr(arr, m);
}
int main()
{
int m = 4, n = 8;
randomList(m, n);
return 0;
}
|
Java
class GFG
{
static void printArr( int arr[], int n)
{
for ( int i = 0 ; i < n; i++)
System.out.print(arr[i] + " " );
}
static void randomList( int m, int n)
{
int arr[] = new int [m];
for ( int i = 0 ; i < n; i++)
{
arr[( int )(Math.random() * m)]++;
}
printArr(arr, m);
}
public static void main(String args[])
{
int m = 4 , n = 8 ;
randomList(m, n);
}
}
|
Python3
from random import randint
def printArr(arr, n) :
for i in range (n) :
print (arr[i], end = " " );
def randomList(m, n):
arr = [ 0 ] * m;
for i in range (n) :
arr[randint( 0 , n) % m] + = 1 ;
printArr(arr, m);
if __name__ = = "__main__" :
m = 4 ; n = 8 ;
randomList(m, n);
|
C#
using System;
class GFG
{
static void printArr( int []arr, int n)
{
for ( int i = 0; i < n; i++)
Console.Write(arr[i] + " " );
}
static void randomList( int m, int n)
{
int [] arr = new int [m];
for ( int i = 0; i < n; i++)
{
Random rnd = new Random();
arr[rnd.Next(0, n) % m]++;
}
printArr(arr, m);
}
public static void Main()
{
int m = 4, n = 8;
randomList(m, n);
}
}
|
Javascript
<script>
function printArr(arr,n)
{
for (let i = 0; i < n; i++)
document.write(arr[i] + " " );
}
function randomList(m,n)
{
let arr = new Array(m);
for (let i=0;i<arr.length;i++)
{
arr[i]=0;
}
for (let i = 0; i < n; i++)
{
arr[(Math.floor((Math.random() * n) )%m)]++;
}
printArr(arr, m);
}
let m = 4, n = 8;
randomList(m, n);
</script>
|
Time Complexity: O(max(M, N))
Auxiliary Space: O(M)
Last Updated :
20 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...