Задачи, сгруппированные по методам решения. От арифметического квадрата до кратчайшего пути (четыре задачи - один алгоритм)
Рассмотрим задачу.
Задача 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 ввести с клавиатуры).
Дополнительные сведения:
и т. д.
Идея решения: