what is wrong?
    8 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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?
0 Kommentare
Akzeptierte Antwort
  Amir Hamzah UTeM
      
 am 7 Mai 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
0 Kommentare
Weitere Antworten (1)
  Oleg Komarov
      
      
 am 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 Kommentar
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



