Опубликован: 21.03.2012 | Доступ: свободный | Студентов: 2972 / 231 | Оценка: 4.44 / 4.19 | Длительность: 06:43:00
Специальности: Программист
Лекция 9:

Задачи, сгруппированные по методам решения. От арифметического квадрата до кратчайшего пути (четыре задачи - один алгоритм)

< Лекция 8 || Лекция 9: 12 || Лекция 10 >
Аннотация: Решение всех рассмотренных в лекции задач зависит от способа заполнение двумерного массива. Этот способ рассматривается в задаче "Арифметический квадрат" и является базовым для решения последующих задач. Цель лекции: научиться применять изученный метод при решении классических задач.

Рассмотрим задачу.

Задача 1: "Арифметический квадрат".

Сколько путей ведет из клетки (1, 1) в клетку (N, M), с условием, что двигаться можно только вниз или вправо?

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

  1. Из клетки (1,1) в любую клетку первой строки и любую клетку первого столбца ведет только один путь (по первой строке - вправо и по первому столбцу - вниз). Заполняем единицами (обозначающими единственный путь) строку и столбец (рис. 8.1).


    Рис. 8.1.
  2. В клетку (2,2) из клетки (1,1) ведут 2 пути (рис.8.2):


    Рис. 8.2.
  3. В клетку (2,3) ведут 3 пути (рис.8.3):


    Рис. 8.3.
  4. и т.д.
  5. Количество путей, ведущих в клетку из клетки (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):


Рис. 8.4.

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

Треугольник Паскаля расположен выше и на побочной диагонали Арифметического квадрата:

\begin{matrix}
&&&&1\\
&&&1&&1\\
&&1&&2&&1\\
&1&&3&&3&&1\\
1&&4&&6&&4&&1
\end{matrix}

Решение задачи на Бейсике:

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 ввести с клавиатуры).

Дополнительные сведения:

"Бином Ньютона":

(А+В)^2 =А^2В^0+2А^1В^1+А^0В^2\\
(А+В)^3=А^3В^0+3А^2В^1+3А^1В^2+А^0В^3\\
(А+В)^4=А^4В^0+4А^3В^1+6А^2В^2+4А^1В^3+А^0В^4\\
(А+В)^5=А^5В^0+5А^4В^1+10А^3В^2+10А^2В^3+5А^1В^4+А^0В^5

и т. д.

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

  • Коэффициенты при слагаемых находятся НА ОСНОВАНИИ ТРЕУГОЛЬНИКА ПАСКАЛЯ (на побочной диагонали Арифметического квадрата, размерностью (n+1)x(n+1)).
  • Степень А уменьшается, степень В увеличивается от 0 до n.
< Лекция 8 || Лекция 9: 12 || Лекция 10 >