what is wrong?

4 views (last 30 days)
Sahab
Sahab on 7 May 2011
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?

Accepted Answer

Amir Hamzah UTeM
Amir Hamzah UTeM on 7 May 2011
try do this,
total=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
penalty1=-10;
total(ii,1)=total+penalty1
c= c + 1;
elseif Y(c+1:c+2) % Three in a row. (33,33,33)
penalty2=-30;
total(ii,1)=total+penalty2
c = c + 4;
elseif x(ii,c+1)==33 % Two in a row.(33,33,11)
penalty3=-20;
total(ii,1)=total+penalty3
c = c + 3;
elseif x(ii,c+1)==11 % Just one 33. (33,11)
penalty4=-10;
total(ii,1)=total+penalty4
c = c + 2;
elseif x(ii,c+1)==22 % pattern 33,22
c = c + 1;
end
else
c = c + 1;
end
end
total(ii,1)=total
end

More Answers (1)

Oleg Komarov
Oleg Komarov on 7 May 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 Comment
Andrei Bobrov
Andrei Bobrov on 7 May 2011
or
t = x==33;
penalty= -(sum(t) - sum(x(find(t)+1)==22))*10;

Sign in to comment.

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!