, так что моя задача - создать матрицу нулей MxM, но с примерно 15% этих значений как 1. «Сумма» всех этих 1s должна быть как можно ближе к 15%, а также превращая его в глобальную переменную для другой функции, но по какой-то причине она иногда застревает в бесконечном цикле. Кто-нибудь знает, почему это происходит?В то время как цикл цикла с замкнутым циклом
function [ board ] = randomking1(a,b)
clc
global sum
sum = 0; %initalizes sum to zero
kings = ceil(0.15*a*b); %finds number of kings needed for board size
board = randi([0,1],a,b); %creates game board of random zeros and ones.
% ones being the kings on the board.
for I = 1:a
for J = 1:b
if board(I,J) == 1
sum = sum + 1; %this set of for loops counts the
%number of kings on the board
end
end
end
while sum > kings || sum < kings-1 %if number of kings on the board is greater than
%number needed, the number of ones is reduced.
for I = 1:a
for J = 1:b
if sum
if board(I,J) == 1 %if a board value =1
board(I,J) = randi([0,1],1) %randomize 0 or 1
if board(I,J) == 0 %if the value becomes zero, subtract from the sum
sum = sum - 1
end
end
end
end
end
disp(sum)
end
"иногда"? который петля точно? для каких входных параметров он застревает? –
Ну, иногда это работает и дает мне ответ, который я ищу, но каждый раз и время он просто бесконечно выводит 0 после 0 после 0 по вертикали. Я думаю, проблема может быть в цикле while. Если я вхожу в randomking1 (4,4), он выдает 3 или 4. Если я вхожу в randomking1 (5,5), он выдает 4 или 5. Но для всех этих входов случайным образом он застревает в цикле, иногда в первый раз я вхожу в него, иногда в пятый раз я запускаю его. – kaygoo
Кажется, что вы чаще зацикливаетесь с более высокими числовыми матрицами, которые я вводил. – kaygoo