PYTHON: Написать программу, которая выводит ваш возраст в формате: "Вам XX год/года/лет". Ключевой момент в программе в том, что надо сделать именно "года/лет/год", когда надо
Просто прогоняем бинарный поиск дважды, сначала ищем ближайшее число, не большее нужного, потом не меньшее. Для того, чтобы такие числа были, можно дописать в массив очень большое число и очень маленькое. Затем выбираем из этих двух найденных чисел то, что будет ближе.
Пример реализации:
def bin_search(arr, target, kind="<="):
assert kind in ["<=", ">="]
if kind == "<=":
comp = lambda a, b: a <= b
else:
comp = lambda a, b: a < b
l = 0
r = len(a) - 1
while l < r - 1:
m = (l + r) // 2
if comp(a[m], target):
l = m
else:
r = m
if kind == "<=":
return arr[l]
else:
return arr[r]
def nearest(arr, target):
nearest_le = bin_search(arr, target, "<=")
nearest_ge = bin_search(arr, target, ">=")
if nearest_ge - target < target - nearest_le:
return nearest_ge
else:
return nearest_le
_ = input()
a = [int(x) for x in input().split()]
a = [float("-Infinity")] + a + [float("+Infinity")]
Просто прогоняем бинарный поиск дважды, сначала ищем ближайшее число, не большее нужного, потом не меньшее. Для того, чтобы такие числа были, можно дописать в массив очень большое число и очень маленькое. Затем выбираем из этих двух найденных чисел то, что будет ближе.
Пример реализации:
def bin_search(arr, target, kind="<="):
assert kind in ["<=", ">="]
if kind == "<=":
comp = lambda a, b: a <= b
else:
comp = lambda a, b: a < b
l = 0
r = len(a) - 1
while l < r - 1:
m = (l + r) // 2
if comp(a[m], target):
l = m
else:
r = m
if kind == "<=":
return arr[l]
else:
return arr[r]
def nearest(arr, target):
nearest_le = bin_search(arr, target, "<=")
nearest_ge = bin_search(arr, target, ">=")
if nearest_ge - target < target - nearest_le:
return nearest_ge
else:
return nearest_le
_ = input()
a = [int(x) for x in input().split()]
a = [float("-Infinity")] + a + [float("+Infinity")]
for target in map(int, input().split()):
print(nearest(a, target))
program chicla;var a,b,c,d,f,sum:integer; sr:real;begin Writeln('Ââåäèòå ïåðâîå ÷èñëî'); readln(a) ; Writeln('Ââåäèòå âòîðîå ÷èñëî'); readln(b); Writeln('Ââåäèòå òðåòüå ÷èñëî'); readln(c); Writeln('Ââåäèòå ÷åòâåðòîå ÷èñëî'); readln(d); f:=a+b; if f>20 then begin f:=f-10; writeln(f); end else begin f:=f+10; writeln(f) end; if b>=0 then begin a:=a-1; b:=b-1; c:=c-1; d:=d-1; writeln('1 ÷èñëî ïîñëå óìåíüøåíèÿ íà åäèíèöó= ',a); writeln('2 ÷èñëî ïîñëå óìåíüøåíèÿ íà åäèíèöó= ' ,b); writeln('3 ÷èñëî ïîñëå óìåíüøåíèÿ íà åäèíèöó= ' ,c); writeln('4 ÷èñëî ïîñëå óìåíüøåíèÿ íà åäèíèöó= ' ,d); end else begin sr:=(a+b+c+d)/4; writeln('Ñðåäíåå àðèôìåòè÷åñêîå = ' ,sr); end;end.