Симпатичный узор — Двумерные массивы
Симпатичный узор
Иван недавно выложил плитку в прихожей, состоящую из квадратных черных и белых плиток. Прихожая Ивана имеет квадратную форму 4×4, вмещающую 16 плиток. Теперь Иван беспокоится, что узор из плиток, который у него получился, может быть несимпатичным. С точки зрения дизайна, симпатичным узором считается тот, который не содержит в себе квадрата 2×2, состоящего из плиток одного цвета.
По заданному расположению плиток в прихожей Ивана требуется определить: является ли выполненный узор симпатичным.


Входные данные
Входной файл INPUT.TXT содержит 4 строки по 4 символа («W» или «B») в каждой, описывающие узор из плиток. Символ «W» обозначает плитку белого цвета, а «B» — черного.
Выходные данные
В выходной файл OUTPUT.TXT выведите «Yes», если узор является симпатичным, и «No» в противном случае.
| № | INPUT.TXT | OUTPUT.TXT |
|---|---|---|
| 1 | BBWB WBWB WBWB BWBW |
Yes |
| 2 | WWWW WWBB WWBB BBBB |
No |
| 3 | BWBW WBWB BWBW WBWB |
Yes |
Решение:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; // Функция для проверки, является ли узор симпатичным bool isPatternCute(const vector<string>& pattern) { // Проверка на наличие одноцветных квадратов 2x2 for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (pattern[i][j] == pattern[i][j + 1] && pattern[i][j] == pattern[i + 1][j] && pattern[i][j] == pattern[i + 1][j + 1]) { return false; // Найден одноцветный квадрат 2x2 } } } return true; // Одноцветных квадратов 2x2 нет } int main() { ifstream inputFile("INPUT.TXT"); // Открытие входного файла ofstream outputFile("OUTPUT.TXT"); // Открытие выходного файла if (!inputFile.is_open()) { cerr << "Не удалось открыть входной файл!" << endl; // Ошибка открытия файла return 1; } vector<string> pattern(4); for (int i = 0; i < 4; ++i) { getline(inputFile, pattern[i]); // Чтение строк узора из файла } inputFile.close(); // Закрытие входного файла // Проверка, является ли узор симпатичным if (isPatternCute(pattern)) { outputFile << "Yes" << endl; // Узор симпатичный } else { outputFile << "No" << endl; // Узор несимпатичный } outputFile.close(); // Закрытие выходного файла return 0; } |
Объяснение кода на C++
Этот код выполняет следующие шаги:
- Открытие входного файла
INPUT.TXTдля чтения.
1ifstream inputFile("INPUT.TXT"); - Проверка успешного открытия входного файла. Если файл не открылся, выводится сообщение об ошибке.
1234if (!inputFile.is_open()) {cerr << "Не удалось открыть входной файл!" << endl;return 1;} - Чтение строк узора из входного файла в вектор
pattern.
1234vector pattern(4);for (int i = 0; i < 4; ++i) {getline(inputFile, pattern[i]);} - Закрытие входного файла после чтения всех данных.
1inputFile.close(); - Проверка, содержит ли узор одноцветные квадраты 2×2, с помощью функции
isPatternCute.
123456789101112bool isPatternCute(const vector& pattern) {for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {if (pattern[i][j] == pattern[i][j + 1] &&pattern[i][j] == pattern[i + 1][j] &&pattern[i][j] == pattern[i + 1][j + 1]) {return false;}}}return true;} - Запись результата в выходной файл
OUTPUT.TXT.
123456if (isPatternCute(pattern)) {outputFile << "Yes" << endl;} else {outputFile << "No" << endl;}outputFile.close();