Лото код, предыдущий номер не может появиться снова, как я могу улучшить его - PullRequest
0 голосов
/ 09 марта 2019

Я использую matlab для написания этого кода, и кажется, что с логикой что-то не так, но я не знаю, в чем я не прав и как это улучшить.

Я хочу написать код лото, и в нем шесть цифр, диапазон первых шести цифр от 1 до 38, диапазон последних цифр от 1 до 8. Вот мой код

previous_number=randi([1,38],1,6)
last=randi([1,8],1,1) %produce the last number

for k =1:6    
    while  last== previous_number %while that last number is the same as the value of one of the previous number
    last=randi([1,8],1,1)%then produce the last number again,until the different value produce
    end
end
ltto=[previous_number last]

но я обнаружил, что последнее число будет генерировать то же число, что и первые шесть чисел, например,

"1" 2 33 55 66 10 "1"

1 "2" 33 55 66 10 "2"
Почему? Я уже сказал

while  last==previous_number(k)
    last=randi([1,8],1,1)
    end   

Если я хочу написать код на языке c или другом программном языке, я думаю, что могу просто использовать if, while и loop, и т. Д., Как этот базовый цикл, я не могу использовать "ismemeber" или randperm. как я могу переписать код?

если переписать как

previous_number=randi([1,38],1,6)
last=randi([1,8],1,1) %produce the last number

for k =1:6    
    if  last== previous_number(k) %while that last number is the same as the value of one of the previous number
    last=randi([1,8],1,1)%then produce the last number again,until the different value produce
    end
end
ltto=[previous_number last]

результат также покажет мне "1" 2 21 12 13 22 "1" иногда

1 Ответ

1 голос
/ 09 марта 2019

Это происходит потому, что вы сначала выполняете итерацию по числам, а затем заменяете last в соответствии с конкретной текущей итерацией, без учета предыдущих.

Например, в данных вашего примера представьте, что last = 10Итак, вы попадаете на шестую итерацию и обнаруживаете, что last равно b(k), то есть 10, поэтому вы его заменяете.Но теперь он может генерировать 1, и вы закончите цикл while и цикл for.

Решение - сравнить last со всем вашим вектором, а не повторять его:

previous_number = b(1:6);
last = previous_number(1);
while ismember(last, previous_number)
    last = randi(8); %produce the last number
end

[По состоянию на обсуждение комментариев:]

Если вы все еще хотите сравнить каждый элемент в отдельности, вы можете сделать это следующим образом:

previous_number=randi([1,38],1,6)
last=randi(8) 
k=0;

while k <= 5   
    k = k + 1;
    if last == previous_number(k)
        last = randi(8);
        k = 0;
    end
end
ltto=[previous_number last]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...