Матч
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;
}
};