Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mybook11.05.12.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Задачи:

  1. Хождение за золотом – 1

  2. Хождение за золотом – 2

  3. Хождение за золотом – 3

  4. Малыш играет в морской бой 1

  5. Малыш играет в морской бой 2

  6. Площадь острова 1

  7. Площадь острова 2

  8. Площади островов 1

  9. Площади островов 2

  10. Прямоугольник или квадрат

  11. Телефонный конь 1

  12. Телефонный конь 2

  13. Телефонный конь 3

  14. Одинокий конь

  15. Два коня

  16. Ферзь и пешка

  17. Голодный конь

  18. Ферзь и конь

  19. Два разноцветных коня

  20. Шахматы

  21. Вырежем шахматную доску

  22. Сапер 1

  23. Робот К-79

  24. Спираль

  25. Прямоугольники

  26. Шарик в лабиринте

  27. Блохи

  28. Гиперканалы

  29. Поиск выхода из лабиринта

  30. Лабиринт

  31. Потоп

  32. Прыжки по матрице

  33. Черные и белые клетки

  34. Магический квадрат

  35. Построение магических квадратов нечетного порядка

  36. Вирусы

  37. Сапер 2

  38. Желанный спайс

  39. Сокровище в лабиринте

  40. Суперквадрат

  41. Матрица

  42. Прорыв через лабиринт

  43. Игра с фишками

  44. Симпатичные таблицы

  45. Магия Копперфильда

  46. Черно-белая графика

  47. Лебеди

Задача 1 Хождение за золотом – 1

Однажды царь решил вознаградить одного из своих мудрецов за хорошую работу. Он привел его в прямоугольную комнату размером NxM, в каждой клетке которой лежало несколько килограммов золота. Царь разрешил мудрецу сделать обойти несколько клеток (переходя с клетки, где сейчас

находится мудрец, в одну из четырех с ней соседних), и собрать все золото, которое попадется на его пути.

Вам дан маршрут мудреца. Требуется определить, сколько килограммов золота он собрал.

Входные данные:

Во входном файле записано план комнаты. Сначала записано количество строк N, затем - количество столбцов M (1≤N≤20,1≤M≤20). Затем записано N строк по M чисел в каждой - количество килограммов золота, которое лежит в данной клетке (число от 0 до 50). Далее записано число X - сколько клеток обошел мудрец. Далее записаны координаты этих клеток (координаты клетки - это два числа: первое определяет номер строки, второе - номер столбца, верхняя левая клетка на плане имеет координаты (1,1), правая нижняя - (N,M)). Гарантируется, что мудрец не проходил по одной и той же клетке дважды.

Выходные данные:

В выходной файл выведите количество килограммов золота, которое собрал мудрец.

Пример входного и выходного файла:

Input.txt

Output.txt

3 4

1 2 3 4

5 6 7 8

9 10 11 12

5

1 1

2 1

2 2

2 3

1 3

22

Program zol1;

const nmax=100;

mmax=100;

var a:array[1..nmax,1..mmax] of integer;

i,n,m,j,t,k,res:integer;

Begin

assign(input,'input.txt'); reset(input);

assign(output,'output.txt'); rewrite(output);

read(n,m);

for i:=1 to n do считываем лабиринт

for j:=1 to m do

read(a[i,j]);

read(t); считываем количество передвижений

res:=0;

for k:=1 to t do

begin

read(i,j); считываем координаты клетки, в которую шагаем

inc(res,a[i,j]); берем из клетки золото

end;

close(input);

write(res); выводим результат

close(output);

end.

задачина2массивы

Задача 2 Хождение за золотом - 2

Задача такая же, как и предыдущая, только мудрец мог более одного раза проходить по одной и той же клетке. Золото с нее он брал при этом только один раз - когда проходил по клетке в первый раз.

Входные и выходные данные такие же, как в предыдущей задаче. Дополнительное ограничение: число пройденных мудрецом клеток не превышает 10000.

Пример:

Input.txt

Output.txt

3 4

1 2 3 4

5 6 7 8

9 10 11 12

9

1 1

2 1

2 2

2 3

1 3

1 2

1 1

1 2

2 2

30

В отличии от первой задачи, в которой мы не изменяли данную матрицу, в этой задаче надо обнулять содержимое клеток, которые мы посещаем.

Program zol2;

const nmax=100;

mmax=100;

var a:array[1..nmax,1..mmax] of integer;

i,n,m,j,t,k,res:integer;

Begin

assign(input,'input.txt'); reset(input);

assign(output,'output.txt'); rewrite(output);

read(n,m);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

read(t);

res:=0;

for k:=1 to t do

begin

read(i,j);

inc(res,a[i,j]);

a[i,j]:=0; очищаем клетку

end;

close(input);

write(res);

close(output);

end.

задачина2массивы

Задача 3 Хождение за золотом - 3

Задача такая же, как и предыдущая, только передвижения мудреца задаются другим способом:

Входные данные

Во входном файле записано план комнаты. Сначала записано количество строк N, затем - количество столбцов M (1≤N≤20,1≤M≤20). Затем записано N строк по M чисел в каждой - количество килограммов

золота, которое лежит в данной клетке (число от 0 до 50). Далее записано число X - сколько клеток обошел мудрец. 1≤X≤10000.

Известно, что мудрец начал с клетки с координатами (1,1).

Далее записано X-1 число: куда перемещался мудрец:

число 1 обозначает, что мудрец делал шаг вправо,

число 2 обозначает, что мудрец делал шаг вверх,

число 3 обозначает, что мудрец делал шаг влево,

число 4 обозначает, что мудрец делал шаг вниз.

Известно, что мудрец не выходил из лабиринта, при этом он мог через одну и ту же клетку пройти несколько раз.

Выходные данные

В выходной файл выведите количество килограммов золота, которое собрал мудрец.

Пример:

Input.txt

Output.txt

3 4

1 2 3 4

5 6 7 8

9 10 11 12

9

4 1 1 2 3 3 1 4

24

В решении этой задачи проще всего использовать оператор case.

Program zol3;

const nmax=100;

mmax=100;

var a:array[1..nmax,1..mmax] of integer;

nap,i,n,m,j,t,k,res:integer;

Begin

assign(input,'input.txt'); reset(input);

assign(output,'output.txt'); rewrite(output);

read(n,m);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

res:=a[1,1]; берем золото из первой клетки

a[1,1]:=0; обнуляем ее

i:=1;j:=1; начальные координаты

read(t); считываем количество клеток в пути

for k:=1 to t-1 do идем по клеткам

begin

read(nap); считываем направление

case nap of

1: begin inc(j);inc(res,a[i,j]);a[i,j]:=0;end; изменяем координаты

2: begin dec(i);inc(res,a[i,j]);a[i,j]:=0;end; берем золото

3: begin dec(j);inc(res,a[i,j]);a[i,j]:=0;end; обнуляем клетку

4: begin inc(i);inc(res,a[i,j]);a[i,j]:=0;end;

end;

end;

close(input);

write(res); выводим результат

close(output);

end.

задачина2массивы

Задача 4 Малыш играет в "Морской бой 1"

Малыш играет в "Морской бой". Поле для игры представляет собой квадрат N x N клеток. На поле отмечены клетки, в которые Малыш уже стрелял. Однако пока он не попал ни в один корабль противника. Требуется определить максимальную длину корабля, который может поместиться в небитых клетках этого поля. Корабль представляет из себя прямоугольник ширины 1 и располагается горизонтально или вертикально. (Гарантируется, что на поле есть хотя бы одна небитая клетка.)

Входные данные

Входной файл содержит в первой строке натуральное число N –размеры поля.

В последующих N строк по N чисел в каждой, числа разделены пробелами. Число 1 означает, что в соответствующую клетку стреляли, число 0 – что в клетку не стреляли.

Выходные данные:

вывести одно число от 1 до N – максимальную возможную длину корабля.

Пример

Input.txt

Output.txt

0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 1 0 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0 0 0

0 0 0 0 1 0 0 0 0 0

0 0 0 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 0 0

9

В решении используем два массива b и c. В массиве b будем длины кораблей по вертикали, а в массиве а по горизонтали. Пробегая по массиву а по строкам, начиная с первой последовательно заполняем массивы а и с , параллельно находя длину самого большого корабля. Для того чтобы не писать условия выхода за пределы массива сделаем окаймление массива нулями.

program malish1;

const nmax=100;

Var

a,b,c:array[0..nmax+1,0..nmax+1] of byte;

i,j,n,max:byte;

Begin

assign(input,'input.txt'); reset(input);

assign(output,'output.txt'); rewrite(output);

fillchar(a,sizeof(a),0);

fillchar(b,sizeof(b),0);

read(n);

for i:=1 to n do

for j:=1 to n do

read(a[i,j]);

max:=0;

for i:=1 to n do

for j:=1 to n do

if a[i,j]=0 если a[i,j]=0, то длина вертикального и горизонтального

корабля увеличится на 1

then

begin

b[i,j]:=b[i-1,j]+1;

c[i,j]:=c[i,j-1]+1;

if max<b[i,j] then max:=b[i,j];

if max<c[i,j] then max:=c[i,j];

end;

write(max);

close(output);

End.

задачина2массивы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]