Ja na szybko napisałem taki kod, z użyciem operatora XOR:
#include <iostream>
int main() {
std::cout << "Podaj rozmiar: ";
unsigned size;
std::cin >> size;
for (unsigned y = 0; y < size; ++y) {
for (unsigned x = 0; x < size; ++x) {
if ((y % 2) ^ (x % 2)) {
std::cout << " ";
} else {
std::cout << "#";
}
}
std::cout << '\n';
}
}
Wyjaśnienie działania kodu
Zmienne x i y to współrzędne wskazujące dane pole naszej szachownicy. Załóżmy, że pole czarne to #', a pole białe to spacja.
Po krótkiej analizie problemu, można dojść do wniosku, że pola będą czarne wtedy, gdy obydwie współrzędne będą parzyste, lub obydwie współrzędne będą nieparzyste. Natomiast pola będą białe wtedy, kiedy jedna ze współrzędnych będzie parzysta, a druga nieparzysta (nie ma znaczenia czy parzysty będzie x, czy y - ważne, żeby były różne).
Parzystość liczby można zbadać stosując operator modulo (%), czyli sprawdzając resztę z dzielenia danej liczby przez liczbę 2.
x % 2
Dla liczb parzystych zostanie zwrócone 0, dla liczb nieparzystych zostanie zwrócone 1.
Warunek w if sprawdza, czy "parzystości" obydwu współrzędnych się czymś różnią - mówiąc prościej, warunek ten zachodzi, gdy jedna współrzędna jest parzysta, a druga nieparzysta.
Gdybyś potrzebował coś dokładniej wyjaśnić, to proszę mówić.