what is wrong?
Afficher commentaires plus anciens
it should show answer of -30,why it show -10?what is wrong?
x=[33,11,33,11,22,33,11];
r4penalty=0;
r3penalty=0;
r2penalty=0;
r1penalty=0;
penalty=0;
for ii = 1:size(x,1)
c = 1;
Y = x(ii,:)==33;
while c <= length(x)-1
if Y(c)
if x(ii,c+1)==11
r4penalty=-10;
c= c + 1;
elseif Y(c+1:c+2) % Three in a row. (33,33,33)
r3penalty=-30;
c = c + 4;
elseif x(ii,c+1)==33 % Two in a row.(33,33,11)
r2penalty=-20;
c = c + 3;
elseif x(ii,c+1)==11 % Just one 33. (33,11)
r1penalty=-10;
c = c + 2;
elseif x(ii,c+1)==22 % pattern 33,22
c = c + 1;
end
else
c = c + 1;
end
end
penalty(ii,1)=r1penalty+r2penalty+r3penalty+r4penalty
end
did somebody know?
Réponse acceptée
Plus de réponses (1)
Oleg Komarov
le 7 Mai 2011
The vectorized solution to your problem:
x = [33,11,33,11,22,33,11];
% Find the 33s that are immediately before 22
bon = nnz(strcmp(x,[33 22]));
% Count the total number of 33
mal = nnz(x == 33);
% Total penalty = -(total33 - 33before22) * single penalty
penalty = -(mal-bon)*10;
1 commentaire
Andrei Bobrov
le 7 Mai 2011
or
t = x==33;
penalty= -(sum(t) - sum(x(find(t)+1)==22))*10;
Catégories
En savoir plus sur GPU Computing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!