Контрольная работа №2

advertisement
Контрольная работа №2
1. Диаметр колеса автомобиля D см. Колесо потребует замены через T оборотов. Написать
программу для того, чтобы определить, сколько раз потребуется сменить колесо при
движении от г.Краснодара до г.N, если расстояние между ними X километров.
Формат входных данных
Файл содержит три числа D, T и X, разделенных пробелами.
Формат выходных данных
Выходной файл содержит количество замен колеса.
Пример входных и выходных файлов
Task01.in
80 200000 1500
80 150000 500
70 150000 700
Task01.out
2
1
2
program Task01;
var
D, X, T, Otvet: integer;
FileIn, FileOut: text;
begin
Assign(FileIn, 'Task01.in');
Assign(FileOut,'Task01.out');
ReSet(FileIn); ReWrite (FileOut);
Read(FileIn, D);
Read(FileIn, T);
Read(FileIn, X);
otvet:=trunc((X*1000.0)/((pi*D)/100.0)) div T;
writeln(FileOut, otvet);
Close(FileIn); Close(FileOut);
end.
2. Дано четырехзначное целое положительное число. После удаления первой цифры это число
уменьшилось в N раз. Вывести в порядке убывания все такие числа.
Формат входных данных
Файл содержит число N.
Формат выходных данных
Выходной файл содержит в отдельной строке такие числа.
Пример входных и выходных файлов
Task1.in
5
4
6
9
program Task14;
var S, SR:String; с: Char;
FileIn, FileOut: Text;
procedure Solve(N: Integer);
Task1.out
3750
2500
1250
4800
3600
2400
1200
7875
6750
5625
4500
3375
2250
1125
Var a, b, c, d, R1, R2: integer;
Begin
For a:=9 downto 1 do
For b:=9 downto 0 do
For c:=9 downto 0 do
For d:=9 downto 0 do Begin
R1:= (b*10+c)*10+d;
R2:= ((a*10+b)*10+c)*10+d;
If R1*N = R2 Then
WriteLn(FileOut, R2);
R:=R+1;
End;
end;
Begin
Assign(FileIn, 'Task14.in');
Assign(FileOut,'Task14.out');
ReSet(FileIn); ReWrite(FileOut);
ReadLn(FileIn, N);
Solve(N);
Close(FileOut); Close(FileIn);
End.
3. 5 Сколько вариантов имеется у учеников для того, стать в шеренгу из N человек?
Формат входных данных
Строка входного файла содержит число N — количество учеников. (1  N  150).
Формат выходных данных
Выходной файл содержит количество вариантов расстановки.
Пример входных и выходных файлов
Task2.in
10
1
10
17
53
111
150
Task2.out
3628800
1
3628800
355687428096000
4274883284060025564298013753389399649690343788366813724672000000
000000
1762952551090244663872161047107075788761409536026565516041574063
3473469550872483164365555745984623157731960476628379789131458474
97199871623320096254145331200000000000000000000000000
5713383956445854590478932865261054003189553578601126418254837583
3179829124845398393126574488675311145377107878746854204162666250
1986845044663559491959220665749425920957357789293253572904449624
7240541679072211844543712226967552000000000000000000000000000000
0000000
Необходимо реализовать «длинный» N!
program Task14;
var
FileIn, FileOut: Text;
procedure Solve(N, K: Integer; Var R: Integer);
begin
end;
Begin
Assign(FileIn, 'Task14.in');
Assign(FileOut,'Task14.out');
ReSet(FileIn); ReWrite(FileOut);
ReadLn(FileIn, N, K);
Solve(N, K, R);
WriteLn(FileOut, R);
Close(FileOut); Close(FileIn);
End.
4. 6 Дана строка символов. Найти все входящие в нее символы. Для заданной строки
определить все входящие в неё символы.
Формат входных данных
Входной файл содержит строку символов.
Формат выходных данных
Все символы через «,», которые входят в строку по одному разу.
Пример входного и выходного файла
Task13.in
abccbbbabba
1 2 3
Task13.out
a,b,c,d
,1,2,3
program Task13;
type SetSimb=Set Of Char;
var S:String; с: Char;
FileIn, FileOut: Text;
procedure Solve(S: String);
begin
end;
Begin
Assign(FileIn, 'Task13.in');
Assign(FileOut,'Task13.out');
ReSet(FileIn); ReWrite(FileOut);
ReadLn(FileIn, S);
Solve(S);
Close(FileOut); Close(FileIn);
End.
5. 8 Вывести в порядке возрастания все простые несократимые дроби из интервала (0, 1),
знаменатели которых не превосходят заданного P9. В последней строке вывести
количество таких дробей.
Формат входных данных
Файл содержит число P.
Формат выходных данных
Каждая строка выходного файла содержит несократимую дробь. Последняя строка
содержит количество таких дробей.
Примеры входных и выходных файлов
Task12.in
3
4
Task12.out
1/3
1/2
2/3
3
1/4
1/3
1/2
2/3
3/4
5
Task12.in
5
9
Program Task12;
Var FileIn, FileOut: Text;
Procedure Solve_T1;
Var m, n, m1, n1, a, b, k,p: Integer;
Begin
ReadLn(FileIn, p);
k:=0;
m:=0; n:=1;
Repeat
If m>0 Then Begin
Writeln(FileOut, m,'/',n);
Inc(k);
End;
m1:=1; n1:=1;
For b:=2 to p Do Begin
a:=m*b div n + 1;
if a*n1 < b*m1 Then begin
m1:=a; n1:=b;
End;
End;
m:=m1; n:=n1;
Until m >= n;
Writeln(FileOut, k);
End { Solve_T1 };
Task12.out
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
9
1/9
1/8
1/7
1/6
1/5
2/9
1/4
2/7
1/3
3/8
2/5
3/7
4/9
1/2
5/9
4/7
3/5
5/8
2/3
5/7
3/4
7/9
4/5
5/6
6/7
7/8
8/9
27
Begin
Assign(FileIn,
Assign(FileOut,
ReSet(FileIn);
Solve_T1;
Close(FileIn);
End.
'Task12.in');
'Task12.out');
ReWrite(FileOut);
Close(FileOut);
6. 10 Фишка может двигаться только вперед по полю длины N. Длина хода фишки не более K.
Найти число различных вариантов ходов, при которых фишка может пройти поле от начала
до конца. Например, при N=3, K=2 — возможные пути: (1,1,1), (1,2), (2,1), т.е. возможны 3
варианта.
Формат входных данных
Файл содержит два числа N и K, разделенных пробелами.
1  N  15, 1  K  15, K  N
Формат выходных данных
Выходной файл содержит число вариантов.
Пример входных и выходных файлов
Task2.in
3 2
15 15
1 1
15 10
15 1
13 7
10 8
Task2.out
3
16384
1
16336
1
3984
509
program Task14;
var S, SR:String; с: Char;
FileIn, FileOut: Text;
procedure Solve(N, K: Integer; Var R: Integer);
begin
end;
Begin
Assign(FileIn, 'Task14.in');
Assign(FileOut,'Task14.out');
ReSet(FileIn); ReWrite(FileOut);
ReadLn(FileIn, N, K);
Solve(N, K, R);
WriteLn(FileOut, R);
Close(FileOut); Close(FileIn);
End.
7. 12 Заданы две упорядоченные по значениям своих элементов целочисленные таблицы
A[1..M] и B[1..N] (M≤50, N≤50). Составить программу создания упорядоченной таблицы
C[1..M+N] слиянием таблиц A и B.
Формат входных данных
Первая строка входного файла содержит числа M и N — количество элементов таблиц A и
B. Вторая строка содержит M значений элементов таблицы A. Третья строка— N значений
элементов таблицы B.
Формат выходных данных
Строка, содержащая упорядоченные значения таблицы C, разделенных пробелами.
Примеры входных и выходных файлов
Task017.in
3 5
2 4 6
1 3 5 7 9
Task017.out
1 2 3 4 5 6 7 9
Program Task17;
Const KMax=50;
Type TArrAB= Array[1..KMax] Of Integer;
TArrC= Array[1..2*KMax] Of Integer;
Var M, N: Integer;
FileIn, FileOut: Text;
A, B: TArrAB;
C: TArrC;
procedure In_mass;
var i: integer;
begin
read(FileIn,M); Readln(FileIn,N);
for i:=1 to M do read(FileIn,a[i]);
readln(FileIn);
for i:=1 to N do read(FileIn,b[i]);
readln(FileIn);
end;
procedure Out_mass;
var i: integer;
begin
for i:=1 to M+N do write(FileOut,c[i]:4);
writeln(FileOut);
end;
{ Процедура слияния двух упорядоченных массивов }
Procedure Solve(M, N: Integer; A, B: TArrAB; Var C: TArrC);
Var i, j, k: Integer;
Begin
i:=1; j:=1;
For k:=1 To M+N Do Begin
If ((i>M) or (A[i]>B[j])) and (j<=N) Then Begin
C[k]:=B[j]; j:=j+1;
End Else Begin
C[k]:=A[i]; i:=i+1;
End;
End;
End { Solve };
begin
Assign(FileIn, 'Task17.in');
Assign(FileOut, 'Task17.out');
ReSet(FileIn); ReWrite(FileOut);
In_mass;
Solve(M,N,A,B,C);
Out_mass;
close(FileIn);close(FileOut);
end.
8. 15 Задана квадратная таблица A, содержащая N строк и N колонок (N≤10).
Составить программу формирования одномерной таблицы B длины
(2*N – 1), элементы которой — минимумы элементов диагоналей,
параллельных главной диагонали (см. рисунок). Формировать таблицу B
начинать с левого нижнего угла таблицы A.
Формат входных данных
Первая строка входного файла содержит число N — количество строк и
колонок таблицы. Следующие N строк содержат по N значений элементов таблицы,
разделяемых пробелами.
Формат выходных данных
Одна строка, содержащая (2*N – 1) элементов таблицы B.
Примеры входных и выходных файлов
Task16.in
5
6
5
4
2
1
7
1
2
3
4
5
6
7
7
6
5
3
3
8
6
5
4
4
9
7
7
6
5
9
8
8
7
6
1
2
3
4
5
6
7
1
2
3
4
5
6
7
1
2
3
4
5
6
7
1
2
3
4
5
6
7
Task16.out
1 2 3 4 5 6 7 8 9
7 6 5 4 3 2 1 1 1 1 1 1 1
1
2
3
4
5
6
7
1
2
3
4
5
6
7
Program Task16;
const
N_max=10;
N_mas=-9;
Type Index=1..N_max;
TXY_Arr = Array [index,index] Of Integer;
T_Arr= Array [N_mas..-N_mas] of integer;
Var N: integer;
A: TXY_Arr;
B: T_Arr;
FileIn, FileOut: Text;
{ Ввод значений из файла }
Procedure InpMass_F (var A: TXY_Arr);
Var i,j: Index;
Begin
ReadLn(FileIn, N);
for i:= 1 to N do begin
for j:=1 to N do
read(FileIn,a[i,j]);
readln(FileIn);
end;
End { InpMass_F };
procedure Out_mass;
var i: integer;
begin
for i:=n-1 downto -n+1 do
write(FileOut,b[i] :4);
end;
{вывод итогового массива}
procedure Add_B;
{Массив из диагональных элементов, псевдо Min}
var h,g,i: integer;
begin
h:=1; g:=n+1;
for i:= -n+1 to n-1 do begin
if i<=0 then begin
dec(g); b[i]:=a[h,g];
end
else begin
inc(h);
b[i]:=a[h,g];
end;
end;
end;
procedure Main_Proc;
var i,j: integer;
begin
for i:=1 to N do
for j:=1 to N do
if B[i-j]>A[i,j] then B[i-j]:=A[i,j];
out_mass;
end;
begin
Assign(FileIn, 'Task16.in');
Assign(FileOut, 'Task16.out');
ReSet(FileIn); ReWrite(FileOut);
InpMass_F(A);
ADD_B;
Main_Proc;
Close(FileIn);
End.
{ Ввод значений из файла }
{ Заполнение массива из первых диагональных элементов матрицы }
{ Нахождение Min на диагонали }
Close(FileOut);
9. 17 Написать программу подсчета количества одно-, двух-, трёх- и четырехпалубных
кораблей, расположенных на поле для игры «Морской бой». Корабли не могут быть
изогнутыми и друг с другом не соприкасаются. Поле для игры задается в виде таблицы NN,
каждый элемент которой равен либо 0, если клетка свободна, либо 1, если занята.
Формат входных данных
Первая строка входного файла содержит число N — количество строк и колонок таблицы.
Следующие N строк содержат по N значений элементов таблицы, разделенных пробелами.
Формат выходных данных
Одна строка, содержащая 4 числа — количество одно-, двух-, трёх- и четырехпалубных
кораблей.
Пример входного и выходного файла
Task26.in
5
1 1
0 0
1 0
0 0
1 0
10
0 0
0 1
0 0
1 0
0 0
1 0
0 0
1 0
0 0
1 0
8
1 0
0 0
1 0
0 0
1 0
0 0
1 0
0 0
Task26.out
2 1 1 1
1
0
1
1
0
0
0
0
0
0
1
1
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
0
0
1
0
1
1
0
0
1
0
1
0
1
0
0
1
0
0
0
0
1
0
1
0
1
0
0
0
0
0
1
0
1
0
0
1
0
1
0
1
1
1
1
0
0
1
0
0
0
0
0
1
0
1
0
1
1
1
1
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
1
1
0
1
6 4 3 3
1
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
0
0
0
1
8 0 0 4
Program Task26;
Const N_MAX=50;
Type Index = 1..N_MAX;
TX_Arr = Array [Index,Index] Of Integer;
Var
k1,k2,k3,k4,n,i,j: Integer;
x: TX_Arr;
FileIn, FileOut: Text;
Procedure InpMass_F (var x: TX_Arr;var n:integer);
Var i,j:integer;
Begin
readln(filein, n);
For i:=1 to n do
For j:=1 to n do Read(FileIn, x[i,j]);
End;
Procedure Solve(var k1,k2,k3,k4: Integer; x:TX_Arr);
Var z,i,j,k,k_0,k_1:integer;
Begin
For i:=1 to n do begin
z:=0;
For j:=1 to n do Begin
If x[i,j]=1 then begin
inc(z);
If j=n then begin
k_0:=0; k_1:=z-1;
End
Else Begin
k_0:=1; k_1:=z;
End;
Case z of
2: inc(k2);
3: inc(k3);
4: inc(k4);
End;
For k:=k_0 to k_1 do x[i,j-k]:=0;
z:=0;
End;
End;
End;
For j:=1 to n do begin
z:=0;
For i:=1 to n do
If (x[i,j]=1) then begin
inc(z);
If i<n then z:=0;
Case z of
1: inc(k1);
2: inc(k2);
3: inc(k3);
4: inc(k4);
End;
End;
End;
Begin
Assign(FileIn, 'Task26.in');
Assign(FileOut, 'Task26.out');
ReSet(FileIn); ReWrite(FileOut);
InpMass_F(x,n);
k1:=0; k2:=0; k3:=0; k4:=0;
Solve(k1,k2,k3,k4,x);
write(fileout,k1,' ',k2,' ',k3,' ',k4);
Close(FileIn); Close(FileOut);
End.
1 2 3 4 5 6 7
10. 19 На квадратном клетчатом листе бумаги NN клеток
1
заштрихована часть клеток. Написать программу, которая
2
определяет
прямоугольник
максимальной
площади,
не
3
содержащий заштрихованных клеток. Предполагается, что такой
4
прямоугольник единственный. В качестве ответа вывести площадь
прямоугольника и координаты его двух противоположных вершин 5
(левой верхней и правой нижней). Для приведенного примера: 6
7
площадь 12, координаты вершин (3,2) и (6,4).
Формат входных данных
Первая строка файла содержит число N — количество строк и колонок таблицы (2  N  10).
Следующие N строк содержат по N значений элементов таблицы, разделенных пробелами
(1 — заштрихованная клетка, 0 — нет).
Формат выходных данных
Первая строка выходного файла содержит значение максимальной площади.
Две следующие строки — координаты левой верхней и правой нижней клеток такого
прямоугольника, разделенных пробелами.
Пример входных и выходных файлов
Task3.in
7
0 1
0 1
1 0
0 0
1 0
0 0
0 1
10
0 1
0 1
1 0
0 0
0 0
0 1
0 0
1 0
0 1
0 1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
0
1
0
1
1
0
1
0
0
1
0
0
0
0
1
0
1
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
0
0
0
Task3.out
12
3 2
6 4
1
0
0
1
0
0
1
0
0
0
1
0
0
0
1
0
0
1
0
0
0
1
1
0
0
1
1
0
1
0
18
2 4
10 5
Представим лист бумаги в виде числовой матрицы А(NxN). Обозначим заштрихованные клетки единицами, а
чистые - нулями.
Напишем подпрограмму, которая проверяет, есть ли в прямоугольнике с координатами левой верхней вершины
(i1,j1) и координатами правой нижней вершины (i2,j2) заштрихованные клетки (т.е. элементы, равные 1).
function prov(a:matr;i1,j1,i2,j2:integer):boolean;
var i,j:integer;
begin
prov:=true;
for i:=i1 to i2 do
for j:=j1 to j2 do
if a[i,j]=1 then prov:=false;
end;
Эта функция будет возвращать значение "истина" (true), если заштрихованных клеток в рассматриваемом
прямоугольнике нет, и "ложно" (false) - в противном случае.
В основной программе организуем два вложенных цикла: в первом цикле будут изменяться координаты верхнего
левого угла рассматриваемого прямоугольника, во втором - координаты нижнего правого угла. Если в
прямоугольнике нет заштрихованных точек, то вычислим его площадь, и если она является максимальной,
запомним её и координаты противоположных вершин этого прямоугольника. Часть основной программы,
реализующая данный алгоритм, будет иметь следующий вид:
maxs:=0;
for i1:=1 to n do
for j1:=1 to n do
for i2:=i1 to n do
for j2:=j1 to n do
begin
s:=(i2-i1+1)*(j2-j1+1);
if prov(a,i1,j1,i2,j2)and(maxs<s) then
begin
maxs:=s;
maxi1:=i1;
maxj1:=j1;
maxi2:=i2;
maxj2:=j2;
end;
end;
writeln(' s=',maxs);
writeln('(',maxi1,',',maxj1,')',
'(',maxi2,',',maxj2,')');
Здесь maxs - площадь полученного прямоугольника, (maxi1, maxj1) - координаты его левой верхней вершины,
(maxi2, maxj2) - координаты его правой нижней вершины.
Download