Задать вопрос
@Xlemon2

Где ошибка в коде?

Условие задачи: Для какого наибольшего целого числа А выражение ((2*x+y>A)or(y>20)or(x>30)) тождественно истинно, т. е. принимает значение 1 при любых целых неотрицательных x и y? Проблема (выводит все отрицательные числа)
Вот код:
for A in range(-100, 1000):
    f = 0
    for x in range(0, 101):
        for y in range(0, 101):
            if ((2*x+y>A)or(y>20)or(x>30))==False:
                f=1
                break
        if f == 1:
            break
    if f == 0:
        print(A)
  • Вопрос задан
  • 629 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
SoreMix
@SoreMix Куратор тега Python
yellow
Проблема (выводит все отрицательные числа)


Так а в чем проблема? На этом выражении ответом и будут только отрицательные числа.

Если взять A = 0, а x,y = 0, то получается условие 2*0+0 > 0 -> False
Если взять A = 1, а x,y = 0, то получается условие 2*0+0 > 1 -> False
Ну и так далее. Все проверки, где A = 0 будут провалены, т.к. левое выражение будет всегда = 0 в начале итерации.

Ответ не может быть положительным числом.

Если под ошибкой подразумевается вывод всех чисел - можно просто запоминать последнее/максимальное число и выводить его в конце
if f == 0:
        last_A = A

# после всех циклов
print(last_A)
Ответ написан
Комментировать
@o5a
Т.к. по условию требуется найти наибольшее значение A, то проще идти по первому циклу в обратном направлении, от большего числа к меньшему, и добавить прерывание цикла при первом же найденном значении A, удовлетворяющем условию. Т.е. изменить примерно так:
for A in range(1000, -101, -1):
    f = 0
    for x in range(0, 101):
        for y in range(0, 101):
            if ((2*x+y>A) or (y>20) or (x>30))==False:
                f=1
                break
        if f == 1:
            break
    if f == 0:
        print(A)
        break


Но вообще (если условия приведены верные), задача решается без необходимости этих вычислений, простой логикой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы