Я рекомендовал вам в своем комментарии попробовать функцию REGEXP. Но на самом деле STRFIND подойдет намного лучше, если вы хотите считать перекрытия, например, считать «222» как 2 расстройства.
Итак, вам нужно что-то вроде этого:
k=dec2base(i,4,n); %# use n to include trailing 0s, just for other possible types of disorders
m = [strfind(k,'13') strfind(k,'22')];
if numel(m) > n/4
count = count+1;
end
Кроме того, вы можете сделать n=0
в качестве первой строки вместо дублирования строки ввода.
И исправьте цикл for до nOfCreatures-1
.
EDIT
Для бонуса векторизованное решение:
nOfCreatures=4^n;
k=cellstr(dec2base(0:nOfCreatures-1,4,n));
m = cellfun(@numel,strfind(k,'13')) + cellfun(@numel,strfind(k,'22'));
count = sum(m > n/4);
fprintf('There are %g creatures and %g of them are zombies.\n',nOfCreatures,count);