«Первые шаги» 2014 Командный турнир по программированию КГБОУ «Центр образования «Эврика» Задача A. Красная шапочка Идея решения. Смоделируем битву! Задача A. Красная шапочка Задача на сравнение двух чисел. var n: longint; begin readln(n); if (n div 2) < n - 10 then writeln(n - 10) else writeln(n div 2); end. Задача A. Красная шапочка Решение на Python. n = int(input()) if n - 10 > n // 2: print(n - 10) else: print(n // 2) Задача A. Красная шапочка Решение на Python. n = int(input()) print(n - 10 if n - 10 > n // 2 else n // 2) Задача A. Красная шапочка Решение на Python. Упростим выражение: x - 10 > n = int(input()) print(n - 10 if n > 20 else n // 2) x 2 x > 20 Задача A. Красная шапочка Решение на Python. n = int(input()) print(max(n - 10, n // 2)) Задача B. Змей Горыныч Идея решения. Смоделируем битву! Задача B. Змей Горыныч При каких условиях бой никогда не закончится? Если число отрубаемых голов меньше (или равно) числу регенерируемых голов и все головы нельзя срубить одним ударом. Задача B. Змей Горыныч var n, m, k, ans: longint; begin readln(n, m, k); if (n <= k) and (n < m) then writeln ('NO') else begin ans := 1; while m > n do begin inc(ans); m := m - n + k; end; writeln(ans); end; end. Задача B. Змей Горыныч Идея решения. Вычислим, через какое число ударов нужно, чтобы головы закончились. if n >= m then ans := 1 else ans := (m - k - 1) div (n - k) + 1; writeln(ans); Задача B. Змей Горыныч var n, m, k, ans: longint; begin readln(n, m, k); if (m > n) and (k >= n) then writeln('NO') else if n >= m then writeln('1') else writeln( (m - k - 1) div (n - k) + 1); end. Задача B. Змей Горыныч Решение на Python. n, m, k = map(int, input().split()) if (m > n) and (k >= n): print('NO') else: print(1 if n >= m else (m - k - 1) div (n - k) + 1) Задача C. Пятимильные сапоги Идея решения. Найдем расстояние между точками по теореме Пифагора. Теперь задача из «двумерной» стала «одномерной». Задача C. Пятимильные сапоги 5 B А C Задача C. Пятимильные сапоги C А B Задача C. Пятимильные сапоги var x1, x2, y1, y2, res: longint; r: real; begin readln(x1, y1); readln(x2, y2); r := sqrt(sqr(x2 - x1) + sqr(y2 - y1)); if r >= 5 then begin res := trunc(r); res := res div 5; if (trunc(r) mod 5 > 0) or (frac(r) > 0) then inc(res); end else res := 2; writeln(res); end. Задача C. Пятимильные сапоги var x1, x2, y1, y2: longint; r:real; begin readln(x1,y1); readln(x2,y2); r:=sqrt(sqr(x2 - x1) + sqr(y2 - y1)) / 5; if r < 1 then r := 2; function Ceil(x: real): integer; Возвращает наименьшее writeln(ceil(r)); целое, большее или равное x. Только в Pascal ABC.Net и end. Borland Delphi !!! Задача C. Пятимильные сапоги Решение на Python. import math x1, y1 = map(int, input().split()) x2, y2 = map(int, input().split()) r = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 / 5 if r < 1: r=2 print(math.ceil(r)) Задача D. Гребешок Бабы-Яги Идея решения. Если n = kx, то ответ - х (при наименьшем k), иначе ответ - 1 Найдем x перебором. Будем перебирать k от 1 до n . Задача D. Гребешок Бабы-Яги var m, n, max, i, k: longint; begin readln(n); ans := 1; for k := 2 to round(sqrt(n)) do begin m := n; x := 0; while m mod k = 0 do begin m := m div k; inc(x); end; if (x > ans) and (m = 1) then ans := x; end; writeln(ans); end. Задача D. Гребешок Бабы-Яги Решение на Python. n = int(input()) res = 1 for i in range(2, int(n ** 0.5) + 1): count = 1 st = 0 while count < n: count *= i st += 1 if count == n: res = st break print(res). Задача E. Иван-царевич и змеёныши Идея решения. Переведем n в двоичную систему счисления. Ответ равен количеству единиц в этом представлении. Например, n = 27. 27 10 = 11011 2 = 16 + 8 + 2 + 1 = = 24 + 23 + 21 + 20. 20 - убивается сразу 21 - убивается после одного ранения 23 - убивается после трех ранений 24 - убивается после четырех ранений Задача E. Иван-царевич и змеёныши var n, res: longint; begin readln(n); while n > 0 do begin if odd(n) then inc(res); n:=n div 2; end; writeln(res); end. Задача E. Иван-царевич и змеёныши Решение на Python. print(bin(int(input())).count('1')) Спасибо за внимание!