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ł ?
0
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;
}
}