На рисунке — схема дорог, связывающих города а, б, в, г, д, е, ж, з, и, к. по каждой дороге можно двигаться только в одном направлении, указанном стрелкой. сколько существует различных путей из города а в город ж?
Будем последовательно находить количество дорог до пунктов, которые встречаются по пути к пункту Ж. Мы уже находимся в городе А, поэтому туда можно сказать ведет 1 дорога. ставим метку. От города А дороги идут в Б Г В и Д, но мы не можем сказать, сколько дорог ведет в города Г В и Д, потому что в них ведет по 2 дороги, из А и из Б/B/Г соответственно, а знаем мы только количество дорог в А(1). Поэтому ставим метку городу, которому мы ее можем дать - это город Б, в который ведет только 1 дорога из А. Количество дорог в какой-либо город равна сумме дорог в города, которые предшествуют ему. То есть в Б ведет тоже только 1 дорога. Помечаем.
По аналогии делаем со всеми другими городами:
Город В: в него ведут 2 дороги, из А и Б, суммируем количество дорог в них и получаем количество дорог в В, то есть 1+1=2.
Город Г: 2 дороги, из А и В, то есть количество дорог в г равно сумме дорог в А и В, то есть 1+2=3
Var i, a, b, n, n2, j: longint; s: string; flag: boolean;
begin Write('Введите натуральное число больше 11: '); Readln(a); if a <= 11 then Writeln('11 - первое симметричное число') else begin Str(a, s); n := Length(s); n2 := n div 2; flag := true; i := 1; repeat flag := (s[i] = s[n - i + 1]); i := i + 1 until (not flag) or (i > n2); if flag then Write('Число симметричное') else Write('Число несимметричное') end; end.
Тестовое решение:
Введите натуральное число больше 11: 123454321 Число симметричное
Рассматривая различные прямоугольники и подсчитывая в них число поворотов P, можно прийти к следующему алгоритму. Для любого натурального k получаем:
var M, N, k, mn, P: integer; f: Text;
begin Assign(f, 'input.txt'); Reset(f); Readln(f, M, N); Close(f); if M < N then mn := M else mn := N; if mn = 1 then P := 0 else begin k := mn div 2; if mn mod 2 = 0 then if M = N then P := 4 * k - 2 else P := 4 * k - 1 else if M = N then P := 4 * k else P := 4 * k + 1 end; Assign(f, 'output.txt'); Rewrite(f); Writeln(f, P); Close(f) end.
46
Объяснение:
Будем последовательно находить количество дорог до пунктов, которые встречаются по пути к пункту Ж. Мы уже находимся в городе А, поэтому туда можно сказать ведет 1 дорога. ставим метку. От города А дороги идут в Б Г В и Д, но мы не можем сказать, сколько дорог ведет в города Г В и Д, потому что в них ведет по 2 дороги, из А и из Б/B/Г соответственно, а знаем мы только количество дорог в А(1). Поэтому ставим метку городу, которому мы ее можем дать - это город Б, в который ведет только 1 дорога из А. Количество дорог в какой-либо город равна сумме дорог в города, которые предшествуют ему. То есть в Б ведет тоже только 1 дорога. Помечаем.
По аналогии делаем со всеми другими городами:
Город В: в него ведут 2 дороги, из А и Б, суммируем количество дорог в них и получаем количество дорог в В, то есть 1+1=2.
Город Г: 2 дороги, из А и В, то есть количество дорог в г равно сумме дорог в А и В, то есть 1+2=3
И так далее. Рисунок со всеми метками прикреплен