random number generation to add and subtract
    12 views (last 30 days)
  
       Show older comments
    
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 Comments
  Pal Szabo
      
 on 8 Sep 2017
				What you mean by this? "And subsequent addition/subtraction should be valid.(i.e. negative number should be subtracted from a positive number)."
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 Comments
More Answers (2)
  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 Comments
See Also
Categories
				Find more on Logical 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!

