Cześć, mam takie zadanie:
Wejście
Na standardowym wejściu znajduje się jedna liczba n (3 ≤ n ≤ 80) oznaczająca rozmiar amuletu.Wyjście
Wypisz amulet na standardowe wyjście.Przykład
Dla danych wejściowych5
poprawną odpowiedzią jest
..X.. .XXX. XXXXX .XXX. ..X..
Dla danych wejściowych
6
poprawną odpowiedzią jest
..XX.. .XXXX. XXXXXX XXXXXX .XXXX. ..XX..
Dla danych wejściowych
7
poprawną odpowiedzią jest
...X... ..XXX.. .XXXXX. XXXXXXX .XXXXX. ..XXX.. ...X...
Zwróć uwagę, że w tym zadaniu wypisujemy kropki zamiast spacji oraz że litera X jest wielką literą a nie małą.
mój kod:
#include <iostream>
using namespace std;
int main() {
int rows, half, dot, cross;
cin >> rows;
bool isEven = (rows % 2 == 0);
if (rows >= 3 && rows <= 80) {
half = (rows - 1) / 2;
for (int r = 0; r < rows; r++) {
dot = abs(half - r);
cross = rows - 2 * dot;
for (int a = 0; a < dot; a++) {
cout << ".";
}
if (dot == 0 && isEven) {
for (int b = 0; b < rows; b++) {
cout << "X";
}
rows--;
cout << endl;
}
for (int b = 0; b < cross; b++) {
cout << "X";
}
for (int c = 0; c < rows-cross-dot; c++) {
cout << ".";
}
cout << endl;
}
}
}
Z liczbami nieparzystymi nie ma problemu, natomiast przy parzystych wysyła złe dane. Przy 6
jest:
..XX..
.XXXX.
XXXXXX
XXXXXX
.XXX.
..X..
zamiast tego co jest podane w zadaniu. Wysyła za połową o 1 x za mało w każdym rzędzie. Wydaję mi się że źle skonstruowałem przedostatnią pętlę for. Macie jakieś pomysły, podpowiedzi?