Split Number into digits adding up to it.

I need to split a number into smaller integers that add up to it.
So 4 -> [0,4],[1,3],[2,2],[3,1],[4,0]
6 -> [0,6],[1,5],[2,4],[3,3]...
I know this can be done with for loops but wanted to see if there is another way.

2 Comments

Stephen23
Stephen23 on 10 Sep 2020
Edited: Stephen23 on 10 Sep 2020
"I need to split a number into smaller integers that add up to it. So 4 -> [0,4],[1,3],[2,2],[3,1],[4,0]"
What about [1,1,1,1],[1,1,2],[1,2,1],[2,1,1],etc., and [4]?
How many zeros are allowed? What about [0,0,0,4], [0,0,2,2], etc.?
This is to simulate aircrafts in a collision paths so zeros and ones would not make sense. Also I have a maximum of 3 vehicles per encounters so I have some extra steps to only consider valid sets. So the only choice for 4 would be [2,2], 6 would have [2,2,2] or [3,3] where each values is the number of vehicles per encounter.

Sign in to comment.

 Accepted Answer

What about
f = @(n) [0:n; n:-1:0].';
Result
>> f(4)
ans =
0 4
1 3
2 2
3 1
4 0
>> f(6)
ans =
0 6
1 5
2 4
3 3
4 2
5 1
6 0

2 Comments

Vary clean and simple. Worked great!
I am glad to be of help!

Sign in to comment.

More Answers (1)

n = 4 ;
[X,Y] = meshgrid(0:n,0:n) ;
thesum = X+Y ;
idx = thesum==n ;
iwant = [X(idx) Y(idx)]
n = 6 ;
[X,Y] = meshgrid(0:n,0:n) ;
thesum = X+Y ;
idx = thesum==n ;
iwant = [X(idx) Y(idx)]

Categories

Find more on App Building in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!