1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Екатерина7 |
23.11.2009 18:18
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Женский Репутация: 0 |
помогите, пожалуйста, разобраться с задачей
Лист бумаги в клетку квадратной формы размера NxN произвольно разрезан на прямоугольные части, каждая из которых имеет целое число клеток. Полученные прямоугольные куски перемешаны. Требуется из заданных прямоугольников снова составить квадрат. Квадрат не обязательно должен быть составлен из прямоугольников в том же порядке, в каком он разрезан. При сборке прямоугольники можно поворачивать. (число N не задано, можно брать любое) |
![]() ![]() |
| klem4 |
6.12.2009 17:02
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Перебор с рекурсией, код неважнецкий, но работает
{$mode TP}
{$r-}
uses crt;
type
TBlock = object
constructor _new(const r, c: integer; const s: char);
procedure shift;
row, col: integer;
sign: char;
end;
TRow = array [1..1] of char;
PTRow = ^TRow;
TField = array [1..1] of PTRow;
PTField = ^TField;
TBlockField = object
constructor _new( const n: integer );
destructor _free;
procedure _print;
procedure _assign( const b: TBlock; const row, col: integer; const unassign: boolean);
function can_assign( const b: TBlock; const row, col: integer ): boolean;
function fill(f: array of TBlock; fi: integer): boolean;
field: PTField;
sz: integer;
done: boolean;
end;
constructor TBlock._new(const r, c: integer; const s: char);
begin
row := r; col := c; sign := s;
end;
procedure TBlock.shift;
var
t: integer;
begin
t := row; row := col; col := t;
end;
constructor TBlockField._new( const n: integer );
var
i, j: integer;
begin
GetMem( field, n * sizeof( PTRow ));
for i := 1 to n do
GetMem( field^[i], n * sizeof(integer));
for i := 1 to n do
for j := 1 to n do
field^[i]^[j] := '0';
sz := n;
done := false;
end;
destructor TBlockField._free;
var
i, j: integer;
begin
for i := 1 to sz do FreeMem( field^[i], sz * sizeof(integer));
FreeMem(field, sz * sizeof(PTRow));
end;
procedure TBlockField._print;
const colors: array ['a'..'g'] of byte = (red,blue,green,lightred,yellow,lightblue,lightgreen);
var
i, j: integer;
begin
for i := 1 to sz do begin
for j := 1 to sz do begin
if (field^[i]^[j] = '0') then TextColor(white) else TextColor(colors[field^[i]^[j]]);
write(field^[i]^[j]:2);
end;
writeln;
end;
writeln;
end;
procedure TBlockField._assign( const b: TBlock; const row, col: integer;
const unassign: boolean);
var
i, j: integer;
s: char;
begin
if ( unassign ) then s := '0' else s := b.sign;
for i := row to row + b.row - 1 do
for j := col to col + b.col - 1 do
field^[i]^[j] := s;
end;
function TBlockField.can_assign( const b: TBlock;
const row, col: integer ): boolean;
var
r, c: integer;
ok: boolean;
begin
if ( row + b.row - 1 > sz ) or ( col + b.col - 1 > sz ) then
can_assign := false
else begin
ok := true;
r := row;
while (( r < row + b.row ) and ( ok )) do begin
c := col;
while (( c < col + b.col ) and ( ok )) do begin
ok := field^[r]^[c] = '0';
inc(c);
end;
inc(r);
end;
can_assign := ok;
end;
end;
function TBlockField.fill(f: array of TBlock; fi: integer): boolean;
var
i, r, c, s: integer;
begin
if ( fi = length(f) ) then done := true;
if done then fill := true;
for r := 1 to sz - f[fi].row + 1 do
for c := 1 to sz - f[fi].col + 1 do
for s := 0 to 1 do begin
if ( s = 1 ) then f[fi].shift;
if not(done) and ( field^[r]^[c] = '0' ) and ( can_assign(f[fi], r, c ) ) then begin
_assign(f[fi], r, c, false);
fill := fill(f, fi + 1);
if not done then _assign(f[fi], r, c, true);
end;
end;
fill := done;
end;
var
bf: TBlockField;
b: TBlock;
f: array [1..6] of TBlock;
begin
clrscr;
f[1]._new(2,1,'a');
f[2]._new(2,2,'b');
f[3]._new(1,1,'c');
f[4]._new(1,1,'d');
f[5]._new(2,1,'e');
f[6]._new(2,3,'f');
bf._new( 4 );
writeln(bf.fill(f, 0));
bf._print;
bf._free;
readln;
end.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
| Lapp |
6.12.2009 19:34
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Перебор с рекурсией, код неважнецкий, но работает Круто, Клёма! Я седни попожжее выложу свой тож тогда. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Екатерина7 рекурсия- разбиение и сборка квадрата 23.11.2009 18:18
Lapp (число N не задано, можно брать любое)Любое - како... 23.11.2009 18:41
Екатерина7 хорошо, допустим N=10 23.11.2009 18:45
Unconnected А как входные данные выглядят? :) 23.11.2009 22:21
Гость может входными данными могут быть массивы этих пря... 24.11.2009 10:05
Lapp может входными данными могут быть массивы этих пря... 26.11.2009 12:20
Екатерина7 может просто сравнивать положения этих прямоугольн... 26.11.2009 18:30
Unconnected Ага, надо сравнивать, ну он видимо спрашивал про к... 26.11.2009 20:16
Екатерина7 да я в приниципе поняла про что.. думаю конкретно ... 26.11.2009 23:50
Unconnected Ну да, координаты нужно сравнивать, но нельзя забы... 27.11.2009 0:58
volvo :blink: То есть, ордината тут как бы не при делах... 27.11.2009 1:08
Unconnected volvo,
Добавлено: Но сути это не меняет..
[b]До... 27.11.2009 10:22
volvo Это тоже сути не меняет, функция как не работала, ... 27.11.2009 13:44
Unconnected volvo, у нас квадрат ограничивается 10 :)
Я напи... 27.11.2009 17:04
Екатерина7 -что-то я не пойму, а какой тут принцип? 27.11.2009 19:09
Unconnected type
tRectangle=record
lx,ly:integer;
end;... 27.11.2009 23:01
Archon Unconnected, что-то сложновато :).
Hint: условие ... 27.11.2009 23:31
Lapp Не знаю, как с точки зрения Екатерина7, но лично м... 28.11.2009 9:34
Unconnected
Мм, ну, возможно, следует описать некий тип и в ... 28.11.2009 10:34
Unconnected Хотя, по словам Lapp'а,
функция для определе... 28.11.2009 11:08
Lapp функция для определения пересечений есть, остаётся... 28.11.2009 14:44
Екатерина7 да,Lapp, с математикой все понятно.. да и с кусоч... 30.11.2009 7:38
Lapp входные данные- параметры прямоугольников,как гово... 30.11.2009 9:26
Екатерина7 набора входных данных нет.. думаю, что можно брать... 30.11.2009 14:20
Lapp думаю, что можно брать вместо повторной сборки про... 2.12.2009 7:39
Екатерина7 если честно, несовсем:( у меня с этим возникли тру... 2.12.2009 18:03
Lapp Кать, если тебе не актуально уже, ты скажи.
А если... 30.11.2009 6:25
Lapp Ну, начать я тебе помогу
var
s,q: integer;
t:... 2.12.2009 18:12
Екатерина7 наверно нет.. затрудняюсь.. в написанном могу разо... 4.12.2009 14:59
Unconnected Екатерина7, ты какой курс, если не секрет?
Просто... 4.12.2009 22:33
Екатерина7 не секрет- 4-й.. да.. нас плохо научили программи... 4.12.2009 23:42
Екатерина7 :wacko: 5.12.2009 16:03
klem4 f[1]._new(2,1,'a');
f... 6.12.2009 21:07
Unconnected А теперь возникает вопрос: с какой вероятностью Ек... 6.12.2009 21:26
Екатерина7 поверят, я постараюсь разобраться))
Добавлено чер... 6.12.2009 21:51
Lapp проверим потом на практике с какой вероятностью))Е... 6.12.2009 22:36
volvo Ну, так со включенным-то работать не будет :) Выле... 6.12.2009 23:43
klem4 К сожалению не знаю как еще дин. массивы в таком в... 7.12.2009 8:31
Екатерина7 спасибо, Lapp:))
Добавлено через 5 мин.
я в при... 7.12.2009 19:33
Екатерина7 Lapp, что-то я вообще не могу понять этой программ... 10.12.2009 20:31
Unconnected Екатерина7, какой у тебя уровень программирования ... 10.12.2009 21:09
Екатерина7 извини, но хватит говорить про мой уровень програм... 11.12.2009 8:43
Lapp заставляют задуматься,Ты задумывайся, никто не про... 11.12.2009 11:03
Екатерина7 ммм. да, это поняла.. такой вопрос: то, что выводи... 11.12.2009 12:22
Lapp что выводится в результатах, Done:... квадрат с б... 11.12.2009 13:33
Екатерина7 а почему Done выводится одно и тоже бесконечное ко... 11.12.2009 15:31
Lapp а почему Done выводится одно и тоже бесконечное ко... 11.12.2009 22:10
Екатерина7 результаты выполнения:
a=2 b=2 ab=4 ... 12.12.2009 9:17
Lapp результаты выполнения:Это неполный результат.
14 с... 12.12.2009 11:19
Екатерина7 нет, не в ручную.. все печатала.. хорошо, проверю. 12.12.2009 17:17
Екатерина7 а что делает function Overlap? 13.12.2009 10:19
Екатерина7 я задала n=6, все получается нормально, без вот эт... 13.12.2009 12:38
Lapp я задала n=6, все получается нормально, без вот эт... 14.12.2009 1:54
Екатерина7 так там не должно быть этих скобок? или они должны... 14.12.2009 23:52
Lapp ааааа.. эти скобочки не должны быть углом?Конечно,... 15.12.2009 0:20
Екатерина7 да, если n брать =8, добавляются скобочки и они уг... 15.12.2009 9:41
Unconnected У меня при N=8 первая комбинация такая получается ... 15.12.2009 13:00
Екатерина7 все, получается. да
Добавлено через 7 мин.
идея... 15.12.2009 19:49
Lapp У меня при N=8 первая комбинация такая получается ... 16.12.2009 0:51
Екатерина7 потому что сначала не получалось..(
Добавлено чер... 16.12.2009 7:33
Lapp потому что сначала не получалось..(Что не получало... 16.12.2009 10:03
Екатерина7 а для чего вот это?
const
r0: tRectangle=(a:1; ... 22.12.2009 21:56
Unconnected
Объявление переменных r0 и l0 типами tRectangle ... 22.12.2009 22:25
Екатерина7 заметила. а что такое NoOne?
[b]Добавлено через ... 22.12.2009 22:52
Екатерина7 я так поняла, что function Overlap(r1: tRectangle;... 22.12.2009 23:07
Lapp я так поняла, что function Overlap(r1: tRectangle;... 23.12.2009 5:58
Екатерина7 спасибо всем огромное, кто принимал участие в реше... 23.12.2009 16:01
Unconnected Ну, насколько я понял, NoOne - булевая переменная,... 22.12.2009 23:04![]() ![]() |
|
Текстовая версия | 15.11.2025 8:45 |