int main () {
int input;
cin >> input;
cout << hex << showbase << input << '\n';
size_t max_ones = 0;
size_t current_ones = 1;
while (input > 0) {
bool first_bit = (input & 1); // pobieramy ostatni bit liczby
input >>= 1; // przesuwamy liczbe bitowo w prawo, zeby pobrac jej kolejny bit
bool second_bit = (input & 1); // pobieramy kolejny bit
if (first_bit & second_bit) { // jesli oba bity sa rowne 1
++current_ones; // zwiekszamy licznik znalezionych jedynek obok siebie
} else { // jesli nie, to updatujemy max_ones
if (current_ones > max_ones)
max_ones = current_ones;
current_ones = 1;
}
}
cout << dec << max_ones;
}
rozwiązanie jest proste, masz liczbę powiedzmy 111001101 i bierzesz po kolei każdą dwójkę kolejnych bitów od końca, czyli: 10, 01, 11, 10, 00, 01, 11, 11, 10. Robiąc bitowy and na tych pobranych bitach ustalamy, że oba są równe 1. Jeśli oba są równe 1 i stoją obok siebie (a stoją, bo bierzemy kolejne bity) to zwiększamy licznik current_ones. Prawda, że proste?