Задача на деление шоколадки

Задача . Условие Шоколадка имеет вид прямоугольника, разделенного на n×m долек. Шоколадку можно один раз разломить по прямой на две части. Определите, можно ли таким образом отломить от шоколадки часть, состоящую ровно из k долек. Программа получает на вход три числа: n, m, k и должна вывести YES или NO. С некоторыми тестами работает с другими нет:

    n = int(input())
    m = int(input())
    k = int(input())
    area = n * m
    last = area - k
    full_m = k / n
    if full_m == (area - last):
       print('YES')
    else:
       print('NO')

Ответы (5 шт):

Автор решения: Vlad Chapl

если шоколадка 4*3 и мы можем отламывать только строки или только столбцы, то нам и нужно посчитать сумму всех возможных столбцов (в нашем случае это 3, 6, 9, 12) и сумму строк (4, 8, 12). Если k совпадает с одним из этих чисел, то ответ "Да".

(В большинстве учебных примеров не нужно стараться вывести целиком формулу ответа. Разбивайте большую задачу на мелкие до тех пор, пока они не становятся тривиальными.)

→ Ссылка
Автор решения: Эникейщик

Если к делится на м или н без остатка, то YES.

Ну и разумеется, к должно быть меньше м * н.

→ Ссылка
Автор решения: Harry
n = int(input())
m = int(input())
k = int(input())

if k < m*n and (k%m==0 or k%n==0):
    print('YES')
else:
    print('NO')

Но интереснее вариант, когда ломать можно хотя бы пару раз :)

→ Ссылка
Автор решения: Георгий
n=int(input())
m=int(input())
k=int(input())
if n*m<k or k==n*m:
    print ('NO')
elif k%m==0 or k%n==0:
    print ('YES')
else: 
    print ('NO')

Условие k==n*m --> NO важно так как в случае если проверять только по кратности то шоколадку 3x1 можно будет разделить так чтобы в ней осталось 3 части

Либо так записать

n = int(input())
m = int(input())
k = int(input())   
if k <= m*n and (k%m==0 or k%n==0):
    print('YES')
else:
    print('NO')
→ Ссылка
Автор решения: Сергей
n = int(input())
m = int(input())
k = int(input())
oppor_vert = "NO"
oppor_hor = "NO"
for x in range (n-1):
    left = (x+1)*m
    right = n*m - left
    if k == left or k == right:
        oppor_vert = ("YES")
for y in range (m-1):
    up = (y+1)*n
    down = n*m - up
    if k == up or k == down:
        oppor_hor = "YES"
if oppor_hor == "YES" or oppor_vert == "YES":
    print ("YES")
else:
    print("NO")
→ Ссылка