Porównanie ciągów liczb

0

Witam, nie specjalnie wiedziałem gdzie wrzucić ten temat, więc z góry przepraszam.
Mam taki problem, potrzebuje porównać 2 ciągi cyfr, pod względem występowania cyfr.
Chodzi o cyfry które występuje w obu ciągach ale na różnych miejscach ( tak chodzi o mastermind :) ),
dajmy na to: 3212 oraz 1232 występują 2,2 na tych samych miejscach oraz trójka występuje raz na różnych miejscach.
Czy ktoś wie w jaki sposób mogę te ciągi porównać ? jakiś pomysł ?

1

Jeśli chcesz wiedzieć ile elementów występuje na dobrych miejscach to zwyczajnie musisz przeiterować oba ciągi i porównywać. To raczej dość oczywiste...
Jeśli chcesz wiedzieć dodatkowo ile elementów wystąpiło, ale na niepoprawnych miejscach to możesz np. zrobić tak:

  • szukane liczby (bez tych które są na dobrych miejscach) wrzucic do jakiejś listy
  • przeiterować posiadane liczby (bez tych które są na dobrych miejscach) i sprawdzać czy są na liście, jeśli są to usuwać z listy i podbijać licznik
0

Dobra, ok, jest lepiej, ale, nie do końca, zrobiłem jak mówiłeś:


        for(int i = 0; i<4; i++){
            if(IntArray[i]!=666){
             //arayya który ma wartość 666 nie biorę pod uwagę.
              lista.add(IntArray[i]);  
            }
        }
        for(int i = 0; i<4; i++){
            if(IntArrayWin[i]!=666){
              for(int j=0; j<lista.size(); j++){
                  if(IntArrayWin[i]==lista.indexOf(j)){
                      lista.remove(j);
                      licznik2++;
                  }
              }  
            }
        }

Coś źle zrobiłem ? czasem wychodzą złe wyniki np dla 2213 i 2231 to poprawne ale na złych miejscach wychodzi jedna :/ powinno być: 2

1
int tb[10]={0},goodpos=0,badpos=0;
for(int i=0;i<4;++i)
  {
   int p=IntArray[i],q=IntArrayWin[i];
   if((p!=666)&&(p==q)) ++goodpos;
   else
     {
      if((p!=666)&&(tb[p]++<0)) ++badpos;
      if((q!=666)&&(tb[q]-->0)) ++badpos;
     }
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1