Матч 333, Шахматный шаблон (ChessboardPattern)

Дивизион 2, Уровень 1

 

Шахматный шаблон удовлетворяет следующим условиям:

1. Шаблон имеет прямоугольную форму;

2. Шаблон содержит только символы ‘.’ и ‘X’;

3. Никакие два соседних символа по горизонтали и вертикали не являются одинаковыми.

4. В левом нижнем углу находится символ ‘.’.

Необходимо построить шахматный шаблон, содержащий rows строк и columns столбцов и вернуть его в массиве строк. Первым символом в последней строке должен быть ‘.’, так как он является левым нижним углом.

 

Класс: ChessboardPattern

Метод: vector<string> makeChessboard(int rows, int columns)

Ограничения: 1 £ rows, columns £ 50.

 

Вход. Размер выводимой шахматной доски: rows строк и columns колонок.

 

Выход. Массив строк, содержащий шахматный шаблон как указано в условии задачи.

 

Пример входа

rows

columns

8

8

1

20

5

1

 

Пример выхода

{"X.X.X.X.",

".X.X.X.X",

"X.X.X.X.",

".X.X.X.X",

"X.X.X.X.",

".X.X.X.X",

"X.X.X.X.",

".X.X.X.X"}

{".X.X.X.X.X.X.X.X.X.X"}

{".", "X", ".", "X", "."}

 

 

РЕШЕНИЕ

вывод данных

 

Построим вектор res из rows строк, каждая из которых изначально содержит columns пробелов. В цикле заполняем массив строк res по правилу:

res[i][j] = ‘.’, если rows+i+j нечетно,

res[i][j] = ‘X’, если rows+i+j четно

Левый нижний угол имеет координаты (rows – 1, 0). Положив i = rows – 1, j = 0, получим rows + i + j = rows + rows – 1 + 0 = 2 * rows – 1, что является нечетным числом. То есть при указанном правиле заполнения левый нижний угол массива будет содержать точку.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

using namespace std;

 

class ChessboardPattern

{

public:

  vector<string> makeChessboard(int rows, int columns)

  {

    string temp(columns,' ');

    int i, j;

    vector<string> res(rows,temp);

    for(i = 0; i < rows; i++)

      for(j = 0; j < columns; j++)

        if ((rows + i + j) % 2) res[i][j] = '.'; else res[i][j] = 'X';

    return res;

  }

};