Актуальной проблемой является рассадка зрителей в зрительном зале театра, кинотеатра, концертного зала и т.д. с соблюдением дистанции между занятыми местами. При этом желательно посадить в зале как можно больше зрителей, соблюдая минимальную требуемую дистанцию между местами. Зрительный зал представляет собой прямоугольник размером N × M, состоящий из единичных квадратов — мест. Расстоянием между местами будем считать сумму расстояний между ними по горизонтали и по вертикали. Расстояние между местами по горизонтали и по вертикали — это модуль разности их координат, считая, что расстояние между двумя соседними местами по горизонтали и по вертикали равно 1.
Например, на рисунке ниже изображён зрительный зал размером 3 × 4, в котором зрители сидят на трёх местах A, B и C.
Расстояние между местами A и B равно 3 (2 по вертикали плюс 1 по горизонтали), расстояние между местами B и C равно 3 (0 по вертикали плюс 3 по горизонтали), расстояние между местами A и C равно 4 (2 по вертикали плюс 2 по горизонтали).
Вам даны размеры зрительного зала N × M и минимальное расстояние между зрителями d. Вам необходимо разместить как можно больше зрителей в зале размером N × M так, чтобы расстояние между любыми двумя занятыми местами было не меньше d.
ответ нужно записать в виде N строк, каждая строка содержит M символов, равных 0 или 1. 0 обозначает свободное место, 1 обозначает занятое место.
Например, в зале размером 3 × 4 можно разместить максимум 3 человек на расстоянии не меньше 3. Пример такого размещения изображён на рисунке выше, а ответ в этом случае записывается так.
0100 0000 1001
Вам нужно дать ответ на несколько вариантов задания: 3-1, 3-2, 3-3, 3-4. На каждое задание ответ сдаётся на отдельной странице.
В задании 3-1 N = 3, M = 5, d = 2. В ответе должно быть 3 строки по 5 символов в каждой.
Var m,n,p:real; k:integer; begin Write('Введите через пробел начало и конец интервала: '); Read(m,n); p:=1; k:=Trunc(m); if (k mod 2)=0 then Inc(k); { Первое нечетное } n:=Int(n); { целочисленный конец интервала } while k<=n do begin p:=p*k; k:=k+2 end; Writeln('Произведение нечетных на интервале: ',p) end.
Тестовое решение: Введите через пробел начало и конец интервала: -3.8 8.2 Произведение нечетных на интервале: 315
var m,n,i,j:integer; p:real; begin Write('Введите через пробел целочисленные границы интервала: '); Read(m,n); for i:=m to n do begin p:=1; if i=0 then Writeln('2^0=1') else if i<0 then begin for j:=-1 downto i do p:=p/2; Writeln('2^(',i,')=',p) end else begin for j:=1 to i do p:=p*2; Writeln('2^',i,'=',p) end end end.
Delphi у меня 7-й версии. будет чем проект открыть? Код модуля в файле Unit1.pas.
P.S. Что-то zip не грузится, код - ниже:
procedure TForm1.Button1Click(Sender: TObject); var N1, N2, N3: Real; begin //Проверок на введённе значения для простоты не делаю N1:=StrToFloat(Edit1.Text); N2:=StrToFloat(Edit2.Text); N3:=StrToFloat(Edit3.Text);
if N1<0 then N1:=N1*N1*N1*N1 else N1:=N1*N1; if N2<0 then N2:=N2*N2*N2*N2 else N2:=N2*N2; if N3<0 then N3:=N3*N3*N3*N3 else N3:=N3*N3;
m,n,p:real;
k:integer;
begin
Write('Введите через пробел начало и конец интервала: ');
Read(m,n);
p:=1;
k:=Trunc(m);
if (k mod 2)=0 then Inc(k); { Первое нечетное }
n:=Int(n); { целочисленный конец интервала }
while k<=n do
begin p:=p*k; k:=k+2 end;
Writeln('Произведение нечетных на интервале: ',p)
end.
Тестовое решение:
Введите через пробел начало и конец интервала: -3.8 8.2
Произведение нечетных на интервале: 315
var
m,n,i,j:integer;
p:real;
begin
Write('Введите через пробел целочисленные границы интервала: ');
Read(m,n);
for i:=m to n do
begin
p:=1;
if i=0 then Writeln('2^0=1')
else
if i<0 then
begin for j:=-1 downto i do p:=p/2; Writeln('2^(',i,')=',p) end
else
begin for j:=1 to i do p:=p*2; Writeln('2^',i,'=',p) end
end
end.
Тестовое решение:
Введите через пробел целочисленные границы интервала: -5 10
2^(-5)=0.03125
2^(-4)=0.0625
2^(-3)=0.125
2^(-2)=0.25
2^(-1)=0.5
2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
2^8=256
2^9=512
2^10=1024
Delphi у меня 7-й версии. будет чем проект открыть? Код модуля в файле Unit1.pas.
P.S. Что-то zip не грузится, код - ниже:
procedure TForm1.Button1Click(Sender: TObject);
var
N1, N2, N3: Real;
begin
//Проверок на введённе значения для простоты не делаю
N1:=StrToFloat(Edit1.Text);
N2:=StrToFloat(Edit2.Text);
N3:=StrToFloat(Edit3.Text);
if N1<0 then N1:=N1*N1*N1*N1 else N1:=N1*N1;
if N2<0 then N2:=N2*N2*N2*N2 else N2:=N2*N2;
if N3<0 then N3:=N3*N3*N3*N3 else N3:=N3*N3;
Edit4.Text:=FloatToStr(N1);
Edit5.Text:=FloatToStr(N2);
Edit6.Text:=FloatToStr(N3);
end;