Stopping a for loop when certain values have been reached

50 vues (au cours des 30 derniers jours)
Ben Hatrick
Ben Hatrick le 16 Jan 2022
Modifié(e) : Torsten le 17 Jan 2022
I am running a for loop at want it to finish when a given number of values have all occured at least once. The ouputs of the for loop range from 1-9 (intagers) and I am saving the values into an array. I want to find how many iterations it takes for every number in this range to have occured at least once but am unsure how to code this. Any ideas would be greatly apprectiated.

Réponse acceptée

Voss
Voss le 16 Jan 2022
Modifié(e) : Voss le 16 Jan 2022
values = [];
n_tries = 1000;
for i = 1:n_tries
values(i) = randi(9);
if all(ismember(1:9,values))
break
end
end
display(i)
i = 27
display(values)
values = 1×27
2 1 9 5 9 3 1 4 4 2 7 3 9 2 5 6 1 2 1 2 7 3 5 1 7 6 8
It's probably better to use a while loop, so you don't have to set a maximum number of iterations (n_tries):
values = [];
i = 0;
while ~all(ismember(1:9,values))
i = i+1;
values(i) = randi(9);
end
display(i)
i = 16
display(values)
values = 1×16
7 8 2 6 6 5 7 4 5 9 3 4 3 7 2 1
  4 commentaires
Torsten
Torsten le 16 Jan 2022
Theoretical result is
9*(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9) = 25.46
Not so far apart.
Torsten
Torsten le 17 Jan 2022
Modifié(e) : Torsten le 17 Jan 2022
@Ben Hatrick Answer moved here:
This is a massive help, thanks so much!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by