Пусть R(n) — количество программ, которые число 2 преобразуют в число n.
Верны следующие соотношения:
1. Если n не делится на 2 и на 3, то тогда R(n) = R(n - 1), так как существует единственный способ получения n из n - 1 — прибавление единицы.
2. Пусть n делится на 2 и не делится на 3.
Тогда R(n) = R(n - 1) + R(n / 2).
3. Пусть n делится на 3 и не делится на 2.
Тогда R(n) = R(n / 3) + R(n - 1).
4. Пусть n делится и на 2 и на 3.
Тогда R(n) = R(n - 1) + R(n / 2) + R(n / 3) .
С её помощью последовательно вычислим значения R(n):
R(2) = 1
R(3) = R(2) + R(1) = 1 + 0 = 1
R(4) = R(3) + R(2) = 1 + 1 = 2
R(5) = R(4) = 2
R(6) = R(5) + R(2) + R(3) = 2 + 1 + 1 = 4
R(7) = R(6) = 4
R(8) = R(7) + R(4) = 4 + 2 = 6
R(9) = R(8) + R(3) = 6 + 1 = 7
R(10) = R(9) + R(5) = 7 + 2 = 9
R(11) = R(10) = 9
R(12) = R(11) + R(6) + R(4) = 9 + 4 + 2 = 15
Так как в траектории должно присутствовать число 12, то для всех следующих R(n) нельзя использовать при пересчёте R(m) такие, что m < 12.
Число 22 наоборот, не должно встречаться в траектории, поэтому не будем учитывать R(22), то есть все следующие R(n) будем подсчитывать без R(22).
Program z18; Var a: array [1..1000] of string; i,j,l,min,h:integer; s:string;Begin write('Введите строку - '); readln(s); l:=s.Length; i:= 1; j:= 1; while i <= l do begin while (s[i] <> ' ') and (i <= l) do begin a[j]:=a[j] + s[i]; i:= i + 1; if (i > l) then break; end; j:= j + 1; i:= i + 1; end; i:= 2; min:=a[1].Length; while (a[i] <> '') do begin l:=a[i].Length; if (l < min) then h:= i; i:= i + 1; end; writeln(a[h]);End.
Program z19; Var a: array [1..1000] of string; i,j,l,min:integer; s:string;Begin write('Введите строку - '); readln(s); l:=s.Length; i:= 1; j:= 1; while i <= l do begin while (s[i] <> ' ') and (i <= l) do begin a[j]:=a[j] + s[i]; i:= i + 1; if (i > l) then break; end; j:= j + 1; i:= i + 1; end; i:= 1; while (a[i] <> '') do begin if ((a[i] = 'мое') or (a[i] = 'Мое')) then a[i]:= 'наше'; write(a[i], ' '); i:= i + 1; end;End.
Пусть R(n) — количество программ, которые число 2 преобразуют в число n.
Верны следующие соотношения:
1. Если n не делится на 2 и на 3, то тогда R(n) = R(n - 1), так как существует единственный способ получения n из n - 1 — прибавление единицы.
2. Пусть n делится на 2 и не делится на 3.
Тогда R(n) = R(n - 1) + R(n / 2).
3. Пусть n делится на 3 и не делится на 2.
Тогда R(n) = R(n / 3) + R(n - 1).
4. Пусть n делится и на 2 и на 3.
Тогда R(n) = R(n - 1) + R(n / 2) + R(n / 3) .
С её помощью последовательно вычислим значения R(n):
R(2) = 1
R(3) = R(2) + R(1) = 1 + 0 = 1
R(4) = R(3) + R(2) = 1 + 1 = 2
R(5) = R(4) = 2
R(6) = R(5) + R(2) + R(3) = 2 + 1 + 1 = 4
R(7) = R(6) = 4
R(8) = R(7) + R(4) = 4 + 2 = 6
R(9) = R(8) + R(3) = 6 + 1 = 7
R(10) = R(9) + R(5) = 7 + 2 = 9
R(11) = R(10) = 9
R(12) = R(11) + R(6) + R(4) = 9 + 4 + 2 = 15
Так как в траектории должно присутствовать число 12, то для всех следующих R(n) нельзя использовать при пересчёте R(m) такие, что m < 12.
R(13) = R(12) = 15
R(22) = R(21) = R(20) = R(19) = R(18) = R(17) = R(16) = R(15) = R(14) = 15
Число 22 наоборот, не должно встречаться в траектории, поэтому не будем учитывать R(22), то есть все следующие R(n) будем подсчитывать без R(22).
R(23) = 0
R(24) = R(23) + R(12) = 15
R(25) = R(24) = 15
R(26) = R(25) + R(13) = 15 + 15 = 30
Program z19; Var a: array [1..1000] of string; i,j,l,min:integer; s:string;Begin write('Введите строку - '); readln(s); l:=s.Length; i:= 1; j:= 1; while i <= l do begin while (s[i] <> ' ') and (i <= l) do begin a[j]:=a[j] + s[i]; i:= i + 1; if (i > l) then break; end; j:= j + 1; i:= i + 1; end; i:= 1; while (a[i] <> '') do begin if ((a[i] = 'мое') or (a[i] = 'Мое')) then a[i]:= 'наше'; write(a[i], ' '); i:= i + 1; end;End.