Форум сайта python.su
Всем привет. Проблема с решением задачи: выдает runtime error на 9 тесте, данные теста недоступны. Вот условия:
Даны числа a, b, c, d, e, f. Решите систему линейных уравнений
ax + by = e
cx + dy = f
Формат ввода
Вводятся 6 чисел a, b, c, d, e, f- коэффициенты уравнений.
Формат вывода
Вывод программы зависит от вида решения этой системы.
Если система не имеет решений, то программа должна вывести единственное число 0.
Если система имеет бесконечно много решений, каждое из которых имеет вид y=px+q, то программа должна вывести число 1, а затем значения p и q.
Если система имеет единственное решение (x₀,y₀), то программа должна вывести число 2, а затем значения x₀ и y₀.
Если система имеет бесконечно много решений вида x=x₀, y — любое, то программа должна вывести число 3, а затем значение x₀.
Если система имеет бесконечно много решений вида y=y₀, x — любое, то программа должна вывести число 4, а затем значение y₀.
Если любая пара чисел (x,y) является решением, то программа должна вывести число 5.
Вот мой код:
a = float(input()) b = float(input()) c = float(input()) d = float(input()) e = float(input()) f = float(input()) if a == 0 and b == 0 and c == 0 and d == 0 and e == 0 and f == 0: print(5) elif b == 0 and d == 0: if a != 0: print(3, e / a) else: print(3, f / c) elif a == 0 and c == 0: if b != 0: print(4, e / b) else: print(4, f / d) elif a * d == b * c and a * f == c * e: if b != 0: print(1, -a / b, e / b) else: print(1, -c / d, f / d) elif a * d == b * c and a * f != c * e: print(0) else: x = (e * d - b * f) / (a * d - b * c) y = (a * f - e * c) / (a * d - b * c) print(2, x, y)
Офлайн
Не знаю в этом ли причина имеено runtime error, но
предположим, что у вас a,b,c,d = 0, а e,f != 0,
в этом случае у нас нет решений, т.е. по условию задачи мы должны в этом случае вывести 0.
А теперь посмотрим по какой ветке if в этом случае пойдут вычисления по данному коду:
В этом случае условие
elif b == 0 and d == 0:
print(3, f / c)
Отредактировано scidam (Авг. 3, 2017 02:40:15)
Офлайн
Большое спасибо, тест 9 пройден. Теперь застрял на 27 тесте. У меня уже голова не может эффективно придумывать тесты и редактировать код, помогите, если не трудно. Вот исправленный вариант кода:
a = float(input()) b = float(input()) c = float(input()) d = float(input()) e = float(input()) f = float(input()) if a == 0 and b == 0 and c == 0 and d == 0 and e == 0 and f == 0: print(5) elif a * d == b * c and a * f != c * e: print(0) elif a == 0 and b == 0 and e != 0: print(0) elif c == 0 and d == 0 and f != 0: print(0) elif a * d == b * c and a * f == c * e: if b == 0 and d == 0: if a != 0 and c != 0: print(3, e / a) elif a == 0: if e == 0: print(3, f / c) elif c == 0: if f == 0: print(3, e / a) elif a == 0 and c == 0: if b != 0: print(4, e / b) elif d != 0: print(4, f / d) elif b != 0: print(1, -a / b, e / b) elif d != 0: print(1, -c / d, f / d) else: x = (e * d - b * f) / (a * d - b * c) y = (a * f - e * c) / (a * d - b * c) print(2, x, y)
Отредактировано Arsenii (Авг. 3, 2017 16:34:41)
Офлайн
а так не проще?
a = float(input()) b = float(input()) c = float(input()) d = float(input()) e = float(input()) f = float(input()) try: x = (e * d - b * f) / (a * d - b * c) y = (a * f - e * c) / (a * d - b * c) print 'x =',x,'y =',y except Exception as ex: print str(ex) print 'a =',a,'b =',b,'c =',c,'d =',d,'e =',e,'f =',f
Офлайн
Мы так пока не умеем(
Офлайн
Разобрался. Если кому интересно, вот код.
a = float(input()) b = float(input()) c = float(input()) d = float(input()) e = float(input()) f = float(input()) if a == 0 and b == 0 and c == 0 and d == 0 and e == 0 and f == 0: print(5) elif a * d == b * c and a * f != c * e: print(0) elif a == 0 and b == 0 and e != 0: print(0) elif c == 0 and d == 0 and f != 0: print(0) elif a == 0 and c == 0 and b * f != d * e: print(0) elif b == 0 and d == 0 and a * f != c * e: print(0) elif a * d == b * c and a * f == c * e: if b == 0 and d == 0: if a != 0 and c != 0: print(3, e / a) elif a == 0: if e == 0: print(3, f / c) elif c == 0: if f == 0: print(3, e / a) elif a == 0 and c == 0: if b != 0: print(4, e / b) elif d != 0: print(4, f / d) elif b != 0: print(1, -a / b, e / b) elif d != 0: print(1, -c / d, f / d) else: x = (e * d - b * f) / (a * d - b * c) y = (a * f - e * c) / (a * d - b * c) print(2, x, y)
Офлайн
Данная задача есть в тренировках Яндекса по алгоритмам 1.0, решается с помощью метода Крамера чуть короче:
def solution(a, b, c, d, e, f): delta = a * d - b * c delta_x = e * d - b * f delta_y = a * f - c * e if delta == 0: if a == b == c == d == e == f == 0: return [5] elif a == b == 0 and e != 0: return [0] elif c == d == 0 and f != 0: return [0] elif delta_x == 0: if a == c == 0: return 4, f / d if b == 0 else e / b elif b == d == 0: return (3, f / c if a == 0 else e / a) if delta_y == 0 else [0] else: return (1, - a / b, e / b) if d == 0 else (1, - c / d, f / d) else: return [0] else: return 2, delta_x / delta, delta_y / delta print(*solution(*[float(input()) for _ in range(6)]))
Офлайн