Space Base Space Base
+7 928 008-80-89
ru
  • en
  • es
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  1. Библиотека
  2. Алгоритмы
  3. Алгоритм заполнения шахматной доски
logo

Алгоритм заполнения шахматной доски

02.06.2020

Достаточно простая, но тем не менее интересная задача для разминки программиста. Думаю, все видели, как выглядит шахматная доска, а также слышали выражение «расставить в шахматном порядке». На случай, если не видели, это поле, состоящее размером 8 на 8 клеток, имеющих разные цвета – черный и белый. При этом, клетки одного цвета не могут быть смежными, а расположены через одну: белый, черный, белый… как по вертикали, так и по горизонтали.

Мы выведем в шахматном порядке восемь строк по восемь символов в каждой. Черный цвет у нас будет изображать символ «X», а белый – «O».

Самое первое, что приходит в голову:

  1. создать двумерный массив соответствующего размера;
  2. двойным циклом заполнить одним белым цветом все поля;
  3. затем можно запустить еще дополнительные циклы, которые будут обходить нужные клетки и назначать «черный» цвет.

Отмечу, что код примера реализован в синтаксисе языка Pascal, но постараюсь писать как можно более универсально, чтобы можно было легко перевести на любой язык программирования. В итоге, самое сложное, что я мог придумать для реализации такого неоптимального алгоритма выглядит следующим образом:

var
  i, j : Integer; // переменные для циалов
  masChess : array[1..8, 1..8] of Char; // массив с полем
begin
  // заполняем массив "белым" цветом
  for i := 1 to 8 do
    for j := 1 to 8 do
      masChess[i, j] := 'O';
      
  // закрашиваем "черным" отдельные ячейки
  i := 1;
  while (i <= 8) do begin
    j := 2;
    while (j <= 8) do begin
      masChess[i, j] := 'X';
      masChess[j, i] := 'X';
      j := j + 2;
    end;
    i := i + 2;
  end;
      
  // вывод результата
  for i := 1 to 8 do begin
    for j := 1 to 8 do
      Write(masChess[i, j], ' ');
    Writeln;
  end;
end.

Пример выше, свою задачу выполняет, но код очень громоздкий. Чтобы заполнить все нужные ячейки, приходится использовать два отдельных присвоения значения как бы в разных плоскостях.

Если подойти к задаче более творчески, можно найти более интересное решение. Для этого достаточно заметить закономерности в расположении клеток. Все они идут через одну по вертикали и по горизонтали. То есть, одноцветные не могут быть рядом. Если присмотреться еще внимательнее, можно заметить еще одну очевидную вещь: номер каждой клетки как по вертикали, так и по горизонтали может быть как четным, так и нечетным. Но главное, что номер каждой «белой» клетки будет одновременно четным или нечетным по каждому направлению. «Черные» клетки при этом будут всегда со разными значениями – одно четное, другое нечетное.

  неч чет неч Чет
неч 0 X 0 X
чет X 0 X 0
неч 0 X 0 X
чет X 0 X 0

В итоге, задачу можно решить очень простым и коротким методом: двойной цикл и одно условие, которое будет определять одинаковы ли значения четности каждой клетки.

var
  i, j : Integer; // переменные для циалов
  masChess : array[1..8, 1..8] of Char; // массив с полем
begin
  // заполняем все ячейки
  for i := 1 to 8 do
    for j := 1 to 8 do
      if odd(i) = odd(j) then
        masChess[i, j] := 'O'
      else
        masChess[i, j] := 'X';
      
  // вывод результата
  for i := 1 to 8 do begin
    for j := 1 to 8 do
      Write(masChess[i, j], ' ');
    Writeln;
  end;
end.

Большинство задач можно решить различными способами. Работа же программиста найти наиболее функциональный и грамотный метод, позволяющий выполнить поставленную задачу наиболее эффективным путем.

Другие материалы:

Алгоритм быстрой сортировки


Алгоритм перемешивания массива


Алгоритм сортировки перемешиванием (Шейкерная сортировка, двунаправленная пузырьковая сортировка)


Написать комментарий

Комментарии

В комментариях запрещено публиковать рекламные материалы. Все сообщения оправляются на модерацию и будут опубликованы, если не нарушают правил сайта после проверки.


коммент.

avatar

Soul

- 28 февраля 2024, 16:05 ↓
Классный сайт!)

Разработка сайтов

Корпоративный сайт
Интернет-магазин
Лендинг - одностраничный сайт
Сайт-визитка
Сайт-портфолио

Проектирование

Прототип, UX-дизайн

Дизайн

UI-дизайн
Логотип

+54 911 2801-4950

info@space-base.net
+7 928 008-80-89

Web-сайты для успешного бизнеса

Web-сайты для успешного бизнеса

Главная Услуги Портфолио События Библиотека Контакты
+7 928 008-80-89 Меню
Политика в отношении обработки персональных данных © Copyright 2014 - | Space-Base

Лучшее время начать свой проект - Сейчас!

Выбраны опции:

Отправить сообщение на:

Telegram WhatsApp

Отправляя сообщение, вы даете свое согласие на
обработку песональных данных