Problem z skonstruowaniem licznika pętli w zadaniu

0

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ściowych

5

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?

0

Podziel sobie ten kod na mniejsze funkcje. Przede wszystkim wydziel samo drukowanie znaków tego samego rodzaju – przygotuj sobie funkcję, która w parametrach przyjmie znak do wyświetlenia i liczbę określającą długość ciągu. Zobaczysz, że o wiele łatwiej będzie napisać ten kod.

0

Ok, dzięki spróbuję i dam znać.

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