Пусть имеется a штук первого типа, b штук второго типа, а требуется взять n пирожных.
Пусть p - количество пирожных первого типа, которые взяли, q - количество пирожных второго типа, которые взяли. Тогда должны выполняться условия:
1) p+q = n
2) 0 <= p <= a
3) 0 <= q <= b
Рассмотрим третье неравенство. q заменим на n-p с учетом первого равенства. После этого преобразуем полученное неравенство.
0 <= n-p <= b
-b <= p-n <= 0
n-b <= p <= n
С учетом второго неравенства, получим окончательные границы для p:
max(0, n-b) <= p <= min(a, n).
Поскольку фиксированное значение p однозначно определяет q, то искомое количество выбрать пары (p, q) равно числу выбрать p - это количество целых чисел на отрезке [max(0, n-b); min(a, n)], то есть ans = min(a, n) - max(0, n-b) + 1. Может так получиться, что ответ неположителен - это из-за того, что выбрать пирожные вообще нельзя. Поэтому нужно и этот момент подкорректировать: ans = max(0, min(a, n) - max(0, n-b) + 1).
n = int(input())
a = int(input())
b = int(input())
ans = max(0, min(a, b) - max(0, n-b) + 1)
print(ans)
Объяснение:
Пусть имеется a штук первого типа, b штук второго типа, а требуется взять n пирожных.
Пусть p - количество пирожных первого типа, которые взяли, q - количество пирожных второго типа, которые взяли. Тогда должны выполняться условия:
1) p+q = n
2) 0 <= p <= a
3) 0 <= q <= b
Рассмотрим третье неравенство. q заменим на n-p с учетом первого равенства. После этого преобразуем полученное неравенство.
0 <= n-p <= b
-b <= p-n <= 0
n-b <= p <= n
С учетом второго неравенства, получим окончательные границы для p:
max(0, n-b) <= p <= min(a, n).
Поскольку фиксированное значение p однозначно определяет q, то искомое количество выбрать пары (p, q) равно числу выбрать p - это количество целых чисел на отрезке [max(0, n-b); min(a, n)], то есть ans = min(a, n) - max(0, n-b) + 1. Может так получиться, что ответ неположителен - это из-за того, что выбрать пирожные вообще нельзя. Поэтому нужно и этот момент подкорректировать: ans = max(0, min(a, n) - max(0, n-b) + 1).
class ATM:
def __init__(self):
self.money = 0.0
self.password = '1234'
def add_money(self, _money) -> bool:
if float(_money) > 0.0:
self.money += float(_money)
return True
return False
def pass_check(self) -> bool:
tries = 1
while input('Give me the password:\n> ') != self.password:
if tries > 2:
return False
tries+=1
print(f'#{tries}: Bad password')
return True
def withdraw(self, _money) -> bool:
if not self.pass_check():
self.close_session()
return False
if float(_money) > 0.0 and self.money - float(_money) >= 0.0:
self.money -= float(_money)
return True
return False
def get_balance(self) -> float:
return self.money
def close_session(self) -> None:
raise SystemExit(0)
# Пример использования 1
_atm = ATM()
_atm.add_money(1700)
print('Your balance is ' + str(_atm.get_balance()))
_atm.withdraw(1600)
print('Your balance is ' + str(_atm.get_balance()))
# Пример использования 2
_atm = ATM()
if _atm.add_money(1600):
print('Money successfully added!')
else:
print('Error while money adding.')
print('Your balance is ' + str(_atm.get_balance()))
if _atm.withdraw(1700):
print('Successfully withdrawn!')
else:
print('Error while money withdrawing.')