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 Commenti

Stephen23
Stephen23 il 10 Set 2020
Modificato: Stephen23 il 10 Set 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.

Accedi per commentare.

 Risposta accettata

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 Commenti

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

Accedi per commentare.

Più risposte (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)]

Categorie

Scopri di più su App Building in Centro assistenza e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by