рекурсия- разбиение и сборка квадрата |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
рекурсия- разбиение и сборка квадрата |
Екатерина7 |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 43 Пол: Женский Репутация: 0 |
помогите, пожалуйста, разобраться с задачей
Лист бумаги в клетку квадратной формы размера NxN произвольно разрезан на прямоугольные части, каждая из которых имеет целое число клеток. Полученные прямоугольные куски перемешаны. Требуется из заданных прямоугольников снова составить квадрат. Квадрат не обязательно должен быть составлен из прямоугольников в том же порядке, в каком он разрезан. При сборке прямоугольники можно поворачивать. (число N не задано, можно брать любое) |
Unconnected |
Сообщение
#2
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата const r0: tRectangle=(a:1; b:1); l0: tLocation=(x: 0; y: 0); Объявление переменных r0 и l0 типами tRectangle и TLocation соответственно (только почему-то он сделал это в секции констант). Сразу же эти переменные инициализируются, т.е. им присваиваются начальные значения (вот эти части: "=(a:1; b:1);=(x: 0; y: 0);"). Цитата еще хотела спросить, а что делает эта функция function Overlap(r1: tRectangle; l1: tLocation; r2: tRectangle; l2: tLocation): boolean; Ну нифига себе... Мы тут, понимаешь, на первой странице этого топа способы проверки на пересечение двух прямоугольников придумывали, а она и не заметила..)) Цитата var r: array[1..n*n+10]of tRectangle; l: array[1..n*n+10]of tLocation; s,i,m,k,done: integer; t: tRectangle; u: tLocation; Clear: boolean; Секция описания переменных, тут всё должно быть понятно. Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Екатерина7 |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 43 Пол: Женский Репутация: 0 |
заметила. а что такое NoOne?
Добавлено через 9 мин. например, вот тут Код begin if y<=n then begin li.x:=x; li.y:=y; NoOne:=true; или тут Код for j:=1 to m do if l[j].x>0 then Clear:=Clear and not Overlap(r[i],li,r[j],l[j]); if Clear then begin Inc(k); l[i]:=li; if k<>m then Put(x mod n+1,y+x div n); l[i]:=l0; Dec(k); NoOne:=false end end; j:=a; a:=b; b:=j; end end; if NoOne then Put(x mod n+1,y+x div n) end end; |
Екатерина7 |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 43 Пол: Женский Репутация: 0 |
я так поняла, что function Overlap(r1: tRectangle; l1: tLocation; r2: tRectangle; l2: tLocation): boolean; -функция, которая выдает True, если прямоугольники пересекаются и False,если нет. так? только если честно, этого я в программе не вижу, в смысле где именно это описывается..
Добавлено через 1 мин. ааа.. спасибо большое! Добавлено через 5 мин. можешь еще объяснить хотя бы в кратце, что делает procedure JustSet; {подготовка входных данных} вот тут with t do repeat Добавлено через 1 мин. |
Текстовая версия | 5.05.2024 6:37 |