I want to write a function which takes as input three integers a, b and c, and generates and returns a random integer that is equally likely to take any value between a and b (inclusive), but will not return the value given by c.

8 views (last 30 days)
This is what I have so far:
function f = randnum_reject(a,b,c)
randnum_reject = (b-a)*rand + a;
f = randnum_reject;
if f == c
f = (b-a)*rand + a;
else
f = randnum_reject;
end
end
I know I probably made the mistake right after I assigned the output to f. I just really don't have any ideas as to how exclude c when I call random numbers from a to b

Answers (2)

Roger Stafford
Roger Stafford on 14 Nov 2013
You don't need a for-loop for this problem.
p = [a:c-1,c+1:b];
f = p(ceil((b-a)*rand));
  6 Comments

Sign in to comment.


Walter Roberson
Walter Roberson on 14 Nov 2013
Do not use a variable with the same name as your function. Inside your function rename the variable randum_reject to something else.
  6 Comments
Image Analyst
Image Analyst on 15 Nov 2013
Are you not wanting to try any of the working solutions under Roger's answer for some reason, and are continuing to use your code (which you admit doesn't work)? If so, why?

Sign in to comment.

Categories

Find more on Creating and Concatenating Matrices 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!