Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача шахматная доска!!! Народ, помогите пожалуйста!!! 
:(
    Опции темы
Irisha17
Дата 3.11.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Шахматная доска

Максимальное время работы на одном тесте:
    

1 секунда

Максимальный объем используемой памяти:
    

64 мегабайта

Из шахматной доски по границам клеток выпилили связную (не распадающуюся на части) фигуру без дыр. Требуется определить ее периметр.

Формат входных данных

Сначала вводится число N (1 ≤ N ≤ 64) – количество выпиленных клеток. В следующих N строках вводятся координаты выпиленных клеток, разделенные пробелом (номер строки и столбца – числа от 1 до 8). Каждая выпиленная клетка указывается один раз.

Формат выходных данных

Выведите одно число – периметр выпиленной фигуры (сторона клетки равна единице).

рисунок
PM MAIL   Вверх
Freak_FB
Дата 3.11.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: нет
Всего: 4



Предлагаю алгоритм.
  • Создать массив булевых значений 8x8
  • Заполнить этот массив во время того, как программа спрашивает на счёт наличия вырезанных клеток. Там где есть доска - будет true, где нет - false
  • Пройтись по массиву по порядку и для всех тех клеток, где есть доска выполнить простую проверку - для каждой стороны если соседняя клетка вырезана - прибавить единичку к счётчику. Особо продумать ситуации с крайними клетками.
Типа вот. Успехов в программировании.


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mr.Anderson
Дата 3.11.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Freak_FB, угу. Это оптимальный вариант. Только вот массив надо побольше взять, не 8х8, как раз для учета крайних клеток.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Freak_FB
Дата 3.11.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: нет
Всего: 4



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


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
Irisha17
Дата 3.11.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.11.2008

Репутация: нет
Всего: нет



Спасибо за совет!
Только есть еще маленькая проблемка....
Я паскаль практически не знаю, мне бы хоть какое-то решение...
PM MAIL   Вверх
Anark1
Дата 3.11.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



Irisha17, это не совет, а решение по сути. Почитай про работу с массивами
http://gimn6.ru/article.asp?id_text=139


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
volvo877
Дата 4.11.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Irisha17 @  3.11.2008,  18:36 Найти цитируемый пост)
мне бы хоть какое-то решение... 

Читаешь координаты клеток и ставишь их как единички в матрицу, изначально заполненную нулями, а потом:

Код

count := 4 * n; { <--- число клеток, записанных в файле }
for i := 1 to 8 do for j := 1 to 8 do
  dec(count, A[i - 1, j] + A[i + 1, j] + A[i, j - 1] + A[i, j + 1]);
, для того, чтобы не "вылетать" за пределы матрицы придется описать ее не как [1 .. 8, 1 .. 8], а как [0 .. 9, 0 .. 9], тогда избавляешься от необходимости контроля индексов...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.