# random number generation to add and subtract

9 views (last 30 days)
Ananya Malik on 8 Sep 2017
Answered: Guillaume on 8 Sep 2017
I want to create an array of 4 single digit numbers in the range [-9,9] without 0. Addition of these 4 numbers should result in a positive number within 0-9 range. for ex. a= [4,-2,3,-1] =4. However 1st number should be compulsorily positive. And subsequent addition/subtraction should be valid.(i.e. negative number should be subtracted from a positive number). Any help would be greatly appreciated.
So far I have tried this:
a= randi([-9,9],4,1);
if sum(a)>=0 && sum(a)<9
a'
end
##### 2 CommentsShow 1 older commentHide 1 older comment
Ananya Malik on 8 Sep 2017
4-2 = 2. this 2+3(3rd number in array) = 5; 5 -1(last number in array) = 4. It means intermediate results should be positive.

Sign in to comment.

### Accepted Answer

Pal Szabo on 8 Sep 2017
Try this, it works for me.
% invoke myfunction
[firstnum secondnum thirdnum fourthnum]=myfunction
% if the fourth number produced is outside the desired range or zero,
% invoke function again
while (-9<=fourthnum & fourthnum<=9 & fourthnum~=0)==0
[firstnum secondnum thirdnum fourthnum]=myfunction
end
%%here are your numbers
firstnum
secondnum
thirdnum
fourthnum
function [firstnum secondnum thirdnum fourthnum]=myfunction
base1 = [-9:1:-1];
base11 = [1:1:9];
base = [base1 base11];
i=randi(9);
firstnum=base11(i);
ii=randi(18);
secondnum=base(ii);
iii=randi(18);
thirdnum=base(iii);
fourthnum=4-firstnum-secondnum-thirdnum
end
##### 0 CommentsShow -1 older commentsHide -1 older comments

Sign in to comment.

### More Answers (2)

KL on 8 Sep 2017
Edited: KL on 8 Sep 2017
numsum = -1;
while numsum<0 || numsum>9
a = randi([1 9]);
b = randi([-9 9],3,1);
while b(1)==0 || b(2)==0 || b(3)==0
b = randi([-9 9],3,1)
end
num = [a;b];
numsum = sum(num);
end
##### 0 CommentsShow -1 older commentsHide -1 older comments

Sign in to comment.

Guillaume on 8 Sep 2017
Another option:
numbers = -1;
while sum(numbers) < 0 | sum(numbers) > 9 | any(cumsum(numbers) < 0)
numbers = randi([1 9], 1, 4) .* (-1).^[2, randi([1 2], 1, 3)];
end
##### 0 CommentsShow -1 older commentsHide -1 older comments

Sign in to comment.

### Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!