Задачи, сгруппированные по методам решения. От арифметического квадрата до кратчайшего пути (четыре задачи - один алгоритм)
Рассмотрим задачу.
Задача 1: "Арифметический квадрат".
Сколько путей ведет из клетки (1, 1) в клетку (N, M), с условием, что двигаться можно только вниз или вправо?
Идея решения:
-
Из клетки (1,1) в любую клетку первой строки и любую клетку первого столбца ведет только один путь (по первой строке - вправо и по первому столбцу - вниз). Заполняем единицами (обозначающими единственный путь) строку и столбец (рис. 8.1).
-
В клетку (2,2) из клетки (1,1) ведут 2 пути (рис.8.2):
-
В клетку (2,3) ведут 3 пути (рис.8.3):
- и т.д.
-
Количество путей, ведущих в клетку из клетки (1,1) зависит от значений верхнего и левого элементов массива (рис.8.4):
Итого: в клетку (4, 4) ведет 20 путей.
Решение задачи на Бейсике:
input "введите размерность массива", n, m dim a (n,m) for j=1 to m a(1,j)=1 next for i=1 to n a(i,1)=1 next for i=2 to n for j=2 to m a(i,j)=a(i-1,j)+a(i,j-1) next j,i print "количество путей="; a(n,m)
Решение задачи на Паскале:
const nn=10;
mm=10;
var a: array [1..nn,1..mm] of integer;
n,m,i,j: integer;
begin
writeln ('введите размерность массива');
readln (n,m);
for j:=1 to m do
a[1,j]:=1;
for i:=1 to n do
a[i,1]:=1;
for i:=2 to n do
for j:=2 to m do
a[i,j]:=a[i-1,j]+a[i,j-1];
writeln (a [n,m]);
end.
Задача 2: Выведите на экран "Треугольник Паскаля" (рис.8.4):
Идея решения:
Треугольник Паскаля расположен выше и на побочной диагонали Арифметического квадрата:

Решение задачи на Бейсике:
input "введите размерность"; n
dim a (n,n)
for i=1 to n
a(1,i)=1
a(i,1)=1
next
for i=2 to n
for j=2 to n-i+1
a(i,j)=a(i-1,j)+a(i,j-1)
next j,i
for i=1 to n
for j=1 to n-i+1
print a(i,j);
next j
print
next i
Решение задачи на Паскале:
const nn=10;
var a: array [1..nn,1..nn] of integer;
n,i,j: integer;
begin
writeln ('введите размерность массива');
readln (n);
for j:=1 to n do
begin
a[1,j]:=1;
a[i,1]:=1;
end;
for i:=2 to n do
for j:=2 to m
a[i,j]:=a[i-1,j]+a[i,j-1];
for i:=1 to n do
begin
for j:=1 to (n-i+1) do
write (a[i,j]);
writeln;
end;
end.
Задача 3: Раскрыть скобки в выражении: (А+В)n (n ввести с клавиатуры).
Дополнительные сведения:

и т. д.
Идея решения:



